为什么会有那么多的gettimeofday通话?


11

为什么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

那20K电话让我担心。任何人都想对此有所了解吗?


Java甚至更糟...
Nils 2013年

您的程序在做什么?
迈克尔·汉普顿

1
我无法回答“为什么”,但是您是否知道stackoverflow.com/questions/7266813/…access.redhat.com/knowledge/docs/zh-CN/Red_Hat_Enterprise_MRG/…?系统调用通常会映射到用户空间代码(“ vsyscall”),因此开销会大大减少。
比特兔(Wabit),2013年

1
伯爵不应该让你担心。轮询只有200个通话,但使用时间超过98%。您可以切换到正常的strace输出,然后您将看到apache正在进行的操作(将大大降低它的速度)。
ott--

Answers:


4

Gettimeofday通常由Apache调用,以将条目记录在调试文件中。还有一些模块使用gettimeofday。所以没什么好担心的。

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

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


但是,如果我的CLI php脚本也执行很多 gettimeofday调用怎么办?我的php有什么问题吗?(如果我不提供时间戳作为参数,即date()或mktime()是否使用这些函数?)
Gekkie 2013年

搜索了一下并编辑了我的答案
timmeyh 2013年

谢谢...我想我只需要忍受所有这些电话。:)
Gekkie 2013年

如果已xdebug安装,它也可能是它的副产品。
B00MER 2015年

1

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


1

每个需要时间戳记的进程都将调用gettimeofday,因此很难知道它是否正常。

例如,它可以是创建日志的模块,可以是检查时间的模块...实际上,在您的情况下,要知道为什么有这么多的gettimeofday,请禁用可能负责调用gettimeofday的apache模块。对位于不同文件夹中的多个日志文件的写入可能过多。

  • 禁用常见的可疑对象,例如mod_log_debug或mod_status
  • 重新加载Apache的配置
  • 痕迹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.