Home > IT, Life in Sogou (Sohu-RD) > Httpd.worker Confused Me

Httpd.worker Confused Me

分享家:Addthis中国

最近因为一个服务需要改版,而且是前端和后端都需要更新。那就免不了要倒腾一下 MySQL 、 Apache 这些服务了。

其实我是很怕倒腾服务器搭建的,在我看来,这要比搞研发麻烦的多,因为每次倒腾这些东西总会因为一些自己莫名其妙的疏忽或者是服务的 bug 而引起一堆连锁反应。

这次的起因其实是个很不起眼的事情。优化完数据库之后需要把数据库搬迁到另外一台服务器上,无意间发现 Apache 的日志很大。看了下 httpd.conf 配置文件,似乎是把日志的级别调的太低了,导致出现了一堆没用的日志。那就改一下配置文件吧,然后输入命令重启apache服务让配置生效。

service httpd restart

Apache 服务关闭失败,给我的回复是一个错误,悲剧!

[crit] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP. Pre-configuration failed

其实之前也遇到过这个情况,我怕重新编译 PHP 后搞出什么别的问题,每次都是

killall httpd
service httpd start

完事。

想想每次这样也不是办法,于是就把 PHP 重新更新编译了一下。

yum update php

重启 Apache ,成功。本以为 Apache 的折腾到目前为止就告一段落了,哪知道新的问题又冒出来了。PHP页面可以被解释执行,但是 PHP 只要一操作 MySQL 就出错。根据以前的经验,我下意识的认为这是 php-mysql 模块丢失或出错导致的问题。于是想都不想地重装一下 php-mysql 模块。

yum reinstall php-mysql

无效,看看

<?php
phpinfo();
?>

php的编译信息里面竟然有 –without-mysql ,太雷了,更新了 PHP 之后,竟然变成这个样子。

百思不得其解之时,我用 top 看了下执行的进程,原先的 httpd 竟然都变成了 httpd.worker。上网查了下发现 worker 是 apache 不同于默认 prefork 模式的另外一个运行模式。

不光通过 .worker ,通过命令也可以区分。

$ httpd -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
$ httpd.worker -l
Compiled in modules:
  core.c
  worker.c
  http_core.c
  mod_so.c

更恼人的时候,这个模式不支持 php-mysql ,这真是要了我的命。得想办法切换回 prefork 模式试试看。

killall httpd.worker
/usr/sbin/httpd -k start

PHP 顺利连接 MySQL,由此可见问题出在了 service 上,它自作主张启动了 httpd.worker 。于是查看一下 /etc/init.d/httpd ,里面有一段清楚写着:

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

看来问题的根源找到了,把 /etc/sysconfig/httpd 中 HTTPD=/usr/sbin/httpd.worker 改为 HTTPD=/usr/sbin/httpd ,果然问题解决了,现在 PHP 可以连接 MySQL 了,service 启动 Apache 也正常了。哈哈~

唠叨了下这次改版遇到的问题。感觉自己遇到问题还是不够冷静,有些时候光靠经验不冷静思考还是挺容易走弯路的。其实在这次改版遇到的问题还不止这个,这篇已经够啰嗦了,就留到下次再说吧。
上面所提到的一些路径都是我用 yum 安装的默认路径,如果有些朋友是自己编译源码安装的,那路径会和文中有出入,请自行更换正确路径。嚯嚯!

You don't feel like leaving comments? Please leave your palm-print.
懒得留言?那留下您的掌印吧。
  1. September 6th, 2010 at 16:43 | #1

    技术性的问题不难,难就难在丫网通某些线路屏蔽国外IP

  2. September 6th, 2010 at 17:35 | #2

    @小康
    唉,囊中羞涩。要不然就用双线服务器了

  1. No trackbacks yet.

:D 8) :down: 8O :!: :halo: :evil: :heart: :kiss: :lol: :money: :mrgreen: :x :| :pirate: :?: :oops: :roll: :P :( :) :o :up: :vangry: :twisted: ;) :? :cry:

也许您会觉得ReCAPTCHA验证码很繁琐,会认为他和其他所有的验证码一样让你厌烦。那请点击这里,您会了解到ReCAPTCHA为人类文化的传承做出了多大的贡献。请您也为人类知识的保存和传递也出一份力吧,谢谢!
 
    Posts Nav.