为什么这么多gettimeofday电话?

为什么PHP / Apache组合会执行如此多的gettimeofday系统调用? 尽pipe每个电话都很快就是一个应该考虑的电话。

只需一个快速strace -c -p [apache2 process id] ,就可以得到以下结果:

 Process 22294 detached % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 98.52 0.010000 51 196 poll 1.48 0.000150 0 20752 gettimeofday 0.00 0.000000 0 94 7 read 0.00 0.000000 0 48 write 0.00 0.000000 0 96 32 open 0.00 0.000000 0 75 close 0.00 0.000000 0 6 chdir 0.00 0.000000 0 766 time 0.00 0.000000 0 2 chmod 0.00 0.000000 0 56 10 access 

那20K的电话让我担心。 任何人都在关注这个?

Gettimeofday通常被Apache调用来loggingdebugging文件中的条目。 还有一些模块使用gettimeofday。 所以没有什么可担心的。

编辑:我做了一些PHP源代码挖掘,想出了以下结果:大多数时间相关的PHP函数将使用系统时间。 由于他们使用系统时间,gettimeofday将被调用很多,所以如果你想减less调用,减less你的时间相关的function。

我不得不说,其他function也使得gettimeofday-calls。 例如,如果你使用php_session_start,这将(有时,依赖于一些参数,如新的会话,…)调用php_combined_lcg,如果没有设置种子值,这将调用lcg_seed得到一个伪随机数。 而lcg_seed将会进行gettimeofday调用。 记住这一点。

我发现启用php模块xdebug会导致strace报告几个gettimeofday调用。

每个需要时间戳的进程都需要调用gettimeofday,所以很难判断是否正常。 它可以是一个模块,创build一个日志,一个模块,检查时间,以知道是否是时候closures通信。 事实上,在你的情况下,要知道为什么有这么多gettomeofday,禁用可以负责调用gettimeofday的apache模块。

  • 禁用像mod_log_debug或mod_status这样的犯罪嫌疑人
  • 重新加载Apache的configuration
  • strace的