注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

System.currentTimeMillis()小调用大消耗  

来自Linsa-林霞   2013-02-28 19:29:38|  分类: 性能测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

System.currentTimeMillis()java中是最常用的获取系统时间的方法,它返回从 UTC 1970 11日午夜开始经过的毫秒数。

在某一项目的性能测试中,定位问题的过程发现它似乎有较大性能损耗,当时开发的实现在for循环里每次都调用一下。那么对一个高并发的服务,如果频繁过度调用会有多大的性能消耗呢?

测试场景:

在两个配置不同和操作系统不同的linux系统上分别单线程测试调用频率为1ms100ms的情况,查看对cpu的性能损耗。测试环境比较干净,测试代码为简单的for循环调用。

对比结果如下

机器配置

操作系统

调用频率

CPU使用率

8CPU

Debian 2.6.26-29

1ms

2%~5%

1VCPU

Debian 2.6.32-41

1ms

2%

8CPU

Debian 2.6.26-29

100ms

1%

1VCPU

Debian 2.6.32-41

100ms

1%

数据说明:

1.    极端情况下1ms调用1次,8CPU消耗点大概在2~5%左右。

2.    调用频率为100ms时,CPU基本在1%左右。

3.    数据说明单单一个System.currentTimeMillis()高频率调用还是有一定CPU消耗的。对一个毫秒级的接口来说这个性能损耗不算小。

所以在高并发的接口中还是应该尽量避免高频调用。

 

那有什么策略既可以获取系统时间又避免高频率调用呢。

参考:http://qa.blog.163.com/blog/static/190147002201331252959779/

http://dow.ngra.de/2008/10/27/when-systemcurrenttimemillis-is-too-slow/

策略一:如果对时间精确度要求不高的话可以使用独立线程缓存时间戳。

策略二:将当前时间赋值给countercounter进行单独计时。

 

  评论这张
 
阅读(4210)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016