服务器症状



QUOTE:
原帖由 alvis 于 2007-7-10 11:39 发表
你用了 PHP 就不可能用 MPM 的 worker 了只能是 prefork,不用浪费时间在 worker 上,

如果你不明白,先看看 /etc/sysconfig/httpd

你能说下故障时的 uptime 的返回么,

一般,不建议把数据库和应用放 ...

我没有发现这个文件/etc/sysconfig/httpd 可能是安装的问题,请问PHP为什么不能用worker而只能是prefork?


另外 ,故障的时候我没有用uptime察看,下次出现的时候注意一下。不过有时用top的时候发现iowait占的资源多

[Copy to clipboard] [ - ]
CODE:
11:52:42  up 2 days, 5 min,  1 user,  load average: 0.83, 0.77, 0.61
59 processes: 58 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total    3.2%    0.0%    0.4%   0.0%     0.0%   46.6%   49.7%
           cpu00    0.2%    0.0%    0.4%   0.0%     0.0%   55.2%   44.2%
           cpu01    8.0%    0.0%    0.8%   0.0%     0.0%   38.2%   53.0%
           cpu02    0.2%    0.0%    0.0%   0.0%     0.0%   55.2%   44.6%
           cpu03    4.6%    0.0%    0.4%   0.0%     0.0%   38.0%   57.0%
Mem:  4119992k av, 4050420k used,   69572k free,       0k shrd,  171268k buff
                   2073588k actv,       0k in_d,   70624k in_c
Swap: 2096440k av,       0k used, 2096440k free                 2732424k cached

下次我注意一下uptime的返回

麻烦说一下PHP为什么不能用worker而只能是prefork?  给个文章的链接也成

多谢大家的关注

我的小站是基于drupal开发的。
数据库和apache都在同一台机器上

要是能分开就好了。。 没银子呀
php 不是线程安全的, mpm 是基于线程库的,

或者这么说, prefork 的启动是 httpd, mpm 的启动是 httpd.worker
一般来说是这样,根据你编译的情况了

也可以设置不检测,应该,其实 php 不是都不是线程安全的,不过,还有部分是,
所以用 mpm 正常情况会给警告

load average 0.8 也是说高不高的一个数,这个给你个标准,如果你是单至强,
这个值应小于 2, 如果你是双至强,应小于 4

他代表同一时间的执行的进程数,也可以看作你机器 CPU 流水线的负载

i/o 大,就是磁盘操作多,你再 vmstat 1 ,然后贴点返回

drupal 不熟,google 了下,好像是个 CMS,最怕这种开源的了,为了架构方便,
SQL 满处扔,打开一个页面,恨不得要做百十来次 SQL 查询和 update,有的还
session 进 SQL

对了,你再 mysqladmin processlist 给个结果

还有 netstat -x 和 netstat -tnp|grep mysql


QUOTE:
原帖由 alvis 于 2007-7-10 12:40 发表 php 不是线程安全的, mpm 是基于线程库的,

或者这么说, prefork 的启动是 httpd, mpm 的启动是 httpd.worker
一般来说是这样,根据你编译的情况了

也可以设置不检测,应该,其实 php 不是都不是线程安全的,不过,还有部分是,
所以用 mpm 正常情况会给警告

load average 0.8 也是说高不高的一个数,这个给你个标准,如果你是单至强,
这个值应小于 2, 如果你是双至强,应小于 4

他代表同一时间的执行的进程数,也可以看作你机器 CPU 流水线的负载

i/o 大,就是磁盘操作多,你再 vmstat 1 ,然后贴点返回

drupal 不熟,google 了下,好像是个 CMS,最怕这种开源的了,为了架构方便,
SQL 满处扔,打开一个页面,恨不得要做百十来次 SQL 查询和 update,有的还
session 进 SQL

对了,你再 mysqladmin processlist 给个结果

还有 netstat -x 和 netstat -tnp|grep mysql

暂时没有理解你说的mpm,一会好好搜索一下

CPU是单至强,load average很少超过2。

vmstat 1的返回:

[Copy to clipboard] [ - ]
CODE:
procs                      memory      swap          io     system         cpu
r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
0  0      0  62976 166780 2734564    0    0     2    46   41    11 10  1 23  6
0  0      0  63260 166780 2734584    0    0     0     0  152  1858 17  3 80  0
0  0      0  63260 166792 2734588    0    0     4   728  300    66  0  0 98  1
1  0      0  63252 166792 2734588    0    0     0     0  125   295  1  1 98  0
0  0      0  63208 166792 2734604    0    0     0     0  127  1471 11  2 87  0
1  0      0  60548 166792 2736996    0    0     0     0  132   639  8  2 91  0

mysqladmin proc stat的返回:

[Copy to clipboard] [ - ]
CODE:
+--------+------+-----------+----+---------+------+-------+------------------+
| Id     | User | Host      | db | Command | Time | State | Info             |
+--------+------+-----------+----+---------+------+-------+------------------+
| 186445 | root | localhost |    | Query   | 0    |       | show processlist |
+--------+------+-----------+----+---------+------+-------+------------------+
Uptime: 180286  Threads: 1  Questions: 15976248  Slow queries: 10  Opens: 55236  Flush tables: 3  Open tables: 64  Queries per second avg: 88.616

netstat -x 的返回:

[Copy to clipboard] [ - ]
CODE:
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  6      [ ]         DGRAM                    1432   /dev/log
unix  3      [ ]         STREAM     CONNECTED     2771637 /tmp/mysql.sock
unix  3      [ ]         STREAM     CONNECTED     2771636
unix  3      [ ]         STREAM     CONNECTED     2771623 /tmp/mysql.sock
unix  3      [ ]         STREAM     CONNECTED     2771622
unix  3      [ ]         STREAM     CONNECTED     2771507 /tmp/mysql.sock
unix  3      [ ]         STREAM     CONNECTED     2771506
unix  3      [ ]         STREAM     CONNECTED     2766111
unix  3      [ ]         STREAM     CONNECTED     2766110
unix  2      [ ]         STREAM     CONNECTED     123503
unix  2      [ ]         STREAM     CONNECTED     123500
unix  2      [ ]         STREAM     CONNECTED     123497
unix  2      [ ]         DGRAM                    2062   
unix  2      [ ]         DGRAM                    1960   
unix  2      [ ]         DGRAM                    1792   
unix  2      [ ]         DGRAM                    1440   

而netstat -tnp | grep mysql没有返回

上面这些数据都是在正常状态下的返回。等故障出来了我再把以上的命令的返回记录下来


至于drupal,确实有你所说的情况,所以很多页面都作了一下基于数据库的cache
netstat -tnp | grep mysql 没返回就是好事情

再觉得慢的时候,就 vmstat 1 看

对了,如果有装 sysstat 也可以 mpstat -P ALL 1, 和 iostat 1
多谢alvis !

我的这个小站慢的时候不是常见 。就是偶尔出现非静态页面没有反应。要重启一下才行

也许真如你所说的两个加速软件不要一起使用。还有那个MPM 估计改不了了。改的话应该要重新编译一下,条件不允许。得过且过吧
两个模块不要同时打开不是俺说的,虽然俺同意他的观点,但我的环境中也是两个一起用的,

ea 负责 cache 预编译结果, ze 负责优化代码执行,因为我的环境没有 zend 编译的代码,应该不会有冲突的吧

不过,就你的 case 来看,可能应该把 ea 的 compress_level 设低点儿,或者干脆关了,
而且 ea 的 keys,session, content 最好也 shm only,能改善下 I/O

不过,个人推测,你机器问题是数据库死锁,mysql 最擅长的 bug 就是 lock,如果你的数据库表引擎用得还是
myisam 的话,就是 table lock,而不知是 row lock,唉,打了这么多,就索性举个例子。

你对 Table A 做 update,而这个 update 又是基于一个不带索引的查询子集,这个查询,真的会很慢(几秒的时间)
而这时,同样的 update 还能被提交,并且进行处理,这时,最先的那个 update 开始的查询处理完了,开始 write
这时,就会有个写锁在上面,后续的 read 看见写锁,就 wait,可随着任务太多,就算开始的写锁释放了,后面有一队
锁等着处理呢,就像以前西直门的堵车一样,你打开页面,也要 select sql,可 sql 在排队,sql 排队可以慢慢等,可
你的浏览器有 timeout

关于锁,研究下http://dev.mysql.com/doc/refman/ ... html#locking-issues
唉,我放着自己的问题不去解决,到处去琢磨别人的问题,要是被老板知道了 .......................

我还是干会儿活先
多谢大家的关注

等我彻底解决了一定来发帖把原因和解决方法说清楚