我正在使用Apache / 2.2.15(Unix)。 在一个特定的项目中(使用php 5.3),日志会在请求执行后(40-50分钟)很长一段时间显示一个请求(从一个复杂的forms发布POST)。
有时请求超时; 有时(正如用户所声称的)它正常运行。 但是我无法解释请求发出和logging时间之间的大的时间转换。
你有什么想法,为什么会发生这种情况? 你有没有发现过类似的东西?
下面的一些日志行:
[12/Oct/2015:11:32:01 -0500] "GET /adm/manageCompanies.php.... [12/Oct/2015:11:32:04 -0500] "GET /adm/manageCompanies.php.... [12/Oct/2015:**10:25:00** -0500] "POST /adm/manageCompanies.ph.... [12/Oct/2015:11:32:04 -0500] "GET /adm/manageCompanies.php.... [12/Oct/2015:11:32:08 -0500] "GET /adm/manageCompanies.php....
大胆的时间线是问题 – 它被完全logging下来…
下面还有一个例子:
[13/Oct/2015:08:18:05 -0500] "POST /adm/manageCompanies.php.... [13/Oct/2015:08:18:05 -0500] "GET /adm/manageCompanies.php .... [13/Oct/2015:08:22:53 -0500] "GET /adm/manageCompanies.php .... [13/Oct/2015:**07:37:37** -0500] "POST /adm/manageCompanies.php.... [13/Oct/2015:08:32:48 -0500] "GET /adm/manageCompanies.php .... [13/Oct/2015:08:32:50 -0500] "GET /adm/manageCompanies.php ....
我怎样才能找出这个问题的原因? 这不是一个logging的问题,但提交的表格超时,造成“损害”。
这一次是Apache收到请求的时间。
Apache完成请求后写入日志。
你可以检查服务器状态哪些请求太长,当你得到一个,拿他的PID。
然后你可以通过这个过程来看看它在做什么:
strace -t -tt -p PID
然后,lsof可以帮助您查看文件描述符标识(连接到数据库,web服务…)
我通常启用请求持续时间日志logging,请参阅%D这里:
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html
它打印满足请求所需的以微秒为单位的时间。 这样你就可以很容易地find哪个scrpits是最慢的。
这就是说,在你的情况下,我会开始debuggingmanageCompanies.php脚本,也许在脚本的“战略”和平中添加一些echo或print_r的某些文件,从处理POST方法的部分开始,在循环之前和之后,数据库查询,写一个时间戳和例如“开始循环富/结束循环富”,希望你有这个想法。