最近我的脚本中的任何日期操作或计算都会挂起,直到它因为花费太长时间而被终止(Maximum execution time of 30 seconds exceeded
错误)。它既可以从Apache运行脚本,也可以在命令行运行。用于工作的所有日期和日期/时间操作。
挂起的代码可以像new DateTime()
或date('Y')
一样简单,但time()
确实有效。
我在Raspberry Pi 3上使用Raspbian Jessie和Apache 2.4.10运行PHP 5.6。
我能想到的唯一与系统相关的日期更改是我添加了RTC module并按照Adafruit tutorial中的步骤进行配置。我不知道这会如何影响PHP。 Python的time.localtime()
和命令行上的普通ol date
或hwclock
仍然按预期工作。
编辑:我注意到如果我让命令行版本继续运行并使用top
进行观察,PHP会使用100%的CPU并且RAM使用量会稳步增加。
更新:我回滚配置不再使用RTC模块,禁用I2C,并重新安装假hwclock。问题依然存在。运行php -r 'echo date("Y");'
占用所有CPU并慢慢占用所有RAM,直到手动终止。该问题似乎与硬件RTC模块无关。
答案 0 :(得分:0)
我想通了!我通过php -r 'echo date("Y");'
运行了strace
并注意到它是递归加载时区的。例如:
openat(AT_FDCWD, "/usr/share/zoneinfo/localtime", ...
最终跟着
openat(AT_FDCWD, "/usr/share/zoneinfo/localtime/localtime", ...
然后
openat(AT_FDCWD, "/usr/share/zoneinfo/localtime/localtime/localtime", ...
你看到了模式。原来问题是我的/etc/localtime
文件夹中有一个名为localtime
的符号链接指向...你猜对了:/etc/localtime
,所以它一直在反复加载时区再次,这解释了CPU使用率和不断增加的RAM使用率。