【发布时间】:2011-01-15 08:53:24
【问题描述】:
我们看到一些奇怪的行为,我们不确定这是否是 apache、php、mysql 或操作系统的问题,所以请转向 stackoverflow 的大脑!
我们让 Apache 和 mod_php 与 mysql5 服务器通信。有时,进程会选择挂起,试图从文件描述符中读取。
在其中一个上启动 strace(所有挂起的过程都显示相同的结果)给出了这个:
[root@prweb133v ~]# strace -p 8450
Process 8450 attached - interrupt to quit
read(57, <unfinished ...>
那么它想读什么?
[root@prweb133v ~]# lsof -p 8450
...
...
httpd 8450 apache 57u IPv4 5546599 TCP
prweb133v.local:36615->hadat.local:mysql (ESTABLISHED)
那是我们的mysql服务器!好吧,我想,也许它正在尝试读取查询的结果。检查 mysql 服务器上的进程列表,连接已建立,但处于 SLEEP 状态。
嗯嗯。
然后我检查了 netstat 看看谁在尝试发送/接收什么。
在网络服务器上:
[root@prweb133v ~]# netstat -t -n -a | grep 36615
tcp 0 5 172.23.179.6:36615 172.23.179.67:3306
ESTABLISHED
在 mysql 服务器上建立了连接,但在发送或接收队列中为 0。
知道这些神秘的 5 个字节可能是什么,或者为什么它们随机无法获取 mysql 服务器吗?
干杯!
迈克
【问题讨论】:
-
您可以自己和/或从其他应用程序连接和查询数据库吗?
-
您确定这是随机发生的并且与特定脚本无关吗?
-
我是迈克的同事;当处于这种故障状态时,您可以打开一个较新的浏览器(获取一个新的 PHP 会话)并使用该站点,就好像什么都没发生一样,所以数据库仍然可以。它可能与包含在所有页面上的脚本相关联,但(到目前为止)您查看的页面触发错误是随机的。
标签: php mysql apache networking tcp