为什么有这么多 gettimeofday 调用?

Gek*_*kie 11 php apache-2.2

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

只是一个快速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
Run Code Online (Sandbox Code Playgroud)

那些 20K 的电话让我很担心。有人愿意对此有所了解吗?

tim*_*eyh 4

Gettimeofday 主要由 Apache 调用来记录调试文件中的条目。还有一些模块使用 gettimeofday。所以没什么好担心的。

编辑:我做了一些 php 源代码挖掘并得出以下结果:大多数与时间相关的 php 函数将使用系统时间。由于它们使用系统时间,因此 gettimeofday 会被大量调用,因此如果您想减少调用,请减少与时间相关的函数。

我必须指出的是,其他函数也会进行 gettimeofday 调用。例如,如果您使用 php_session_start,这将(有时,取决于一些参数,例如新会话,...)调用 php_combined_lcg,如果没有设置种子值,则该调用将依次调用 lcg_seed得到一个伪随机数。lcg_seed 将进行 gettimeofday 调用。请记住这一点。