今天无意中查看到了一个apache+php的服务器上出现了很多httpd <defunct> 进程。
第一次见到这个名字的进程,于是查阅了相关资料。
记录一下我理解到的httpd <defunct>:
1、什么是httpd <defunct>
defunct进程实际上是‘zombies’进程(top里查看到标记为‘Z’的进程)。
当一个进程执行完毕、结束后,需要其父进程来读取自己的状态,才能完全结束,这期间,如果父进程一直没有来读取状态,那么这个执行完毕的进程会一直在进程表中占据一个条目,这个时候的进程就是 'defunct' 进程。
更多的内容介绍可以查看:http://en.wikipedia.org/wiki/Zombie_process
2、为什么会产生httpd <defunct>进程
默认情况下,apache的设置是:一个工作进程执行完指定数目的请求后,主进程会结束掉这个工作进程。这样设计是为了不至于内存泄漏,从而导致失控。
第一种情况:像前面所说的,apache的主进程会对“寿终正寝”的工作进程进行回收。然而当服务器负载(load)很高时,apache的主进程可能没有空闲的时间去执行这一步回收工作。从而导致这些没有回收的“寿终正寝”的工作进程以‘defunct’的姿态出现在top命令里。在这种情况下出现‘defunct’进程是不用太担心的,除非有超大量的‘defunct’进程。
另一种可能的情况是:工作进程异常退出导致的,异常退出的原因可能有很多,比如web应用的代码里有bug,或者web应用的引擎有bug。这种情况,可以通过查看apache的error_log日志来查看,查找是否有严重的错误日志打印出来。
我碰到的情况都不是上面两种,所以我又查了更多的资料,比如这个:
Thanks all for your help....
I finally nailed it down to the access_log which was 2GB big, which is the limit of the file system!
Guess i should implement some logrotation :D
Thanks everyone for their suggestions/help!
regards,
他说的是日志文件达到2G的上限,导致出现httpd <defunct> 进程,我这里使用的是cronolog来按天切割日志,每个日志文件才几十M,所以这个也不是想要的。
再比如这个:
问题的原因不会apache的问题,而是php版本的兼容性问题。
介于这个问题,我开始察看PHP问题,终于发现是php我安装了mmcahe,而且mmcache已经很久之前就停止开发了,对linux x86-64有兼容性问题。去掉mmcache,问题解决。
还有这个同学的描述:点击这里
都不符合我机器上的环境,所以我索性重启了一下apache,然后问题就解决了,很匪夷所思。原因依然待查……
最后,贴一段对系统管理员有用的,对“defunct”进程本质的解释:
The below explains what <defunct> means. If you aren't a Unix system administrator, this may not be of interest to you.
Normally, when a process exits (normally or abnormally), it enters a state known as “zombie” (which in top appears as Z). Its process ID stays in the process table until its parent waits on (or “reaps”) it. Under normal circumstances, when the parent process fully expects its child processes to exit, it sets up a signal handler for SIGCHLD so that, when the signal is sent (upon a child process's exit), the parent process then reaps it at its convenience.
If the parent process has hung for some reason, such as if it's suspended, or is too busy, or is deadlocked, then child processes that exit will not be reaped (until the parent process resumes again). This can cause serious problems if there are many child processes, occupying slots in the process table that will not be freed.
In that case, one solution (if the parent process is unrecoverable, say), is to kill the parent process. Then, the child processes will be reparented to the init process (process ID 1), which will reap them. (If the init process is stalled, then you have much, much bigger problems than child processes not being reaped. In fact, a crashed init process will usually cause a kernel panic.)
-----EOF------
分享到:
相关推荐
<br><br><br>@copyright 2007-2008 http://hi.baidu.com/sleets<br><br>软件版本 <br> php 5.2.6<br> lighttpd 1.4.16<br> mysql 4.1.22<br> phpmyadmin 2.11.8.1<br><br>如何开启Zend Optimizer<br> 去掉 .\etc\...
<br> /var/log/maillog 紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄 <br> /var/log/cron 記錄 crontab 這個例行性服務的內容 <br> /var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /...
关于 X3-BLOG<br><br> X3-BLOG 是基于XML+XSLT+AJAX技术构建的开源多用户博客门户系统,服务器端采用当前最流行的动态网页开发语言ASP.NET(C#) <br><br>2.0编写,支持多种数据库,包括SQLSERVER2000\SQLSERVER2005\...
<br><br>ps:<br>本人在win2003r2 sp2上用vc6编译apache httpd2.2.4时出现错误:<br>Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.<br>解决方案:<br>httpd-...
<br>用文本编辑工具打开Apache安装目录下的conf子目录下的httpd.conf文件,在#LoadModule ssl_module modules/mod_ssl.so语句下面增加以下语句:LoadModule jk2_module modules/mod_jk2.so ,这就使mod_jk2在Apache...
<title>个人信息</title> </head> <body> <h1>个人信息</h1> <p>班级:XX班</p> <p>姓名:xingming</p> <p>学号:000001</p> </body> </html> ``` 这样,通过访问`http://172.16.2.14/home/xingming`,就...
<tr><th>artist-id</th><th>artist-name</th></tr> <?php $connection = @mysql_connect("localhost","root","123456"); if (!$connection) { die('Could not connect: ' . mysql_error()); } $db_selected = mysql...
### 关于Web的设置:同一个主机两个虚拟网站 在现代Web服务器管理中,为了更好地利用资源和服务多个不同的网站,管理员通常会在同一台物理主机上设置多个虚拟网站。虚拟网站(或称为虚拟主机)允许在同一台服务器上...
<If>, <ElseIf>, and <Else> sections can be used to set the configuration based on per-request criteria. General-purpose expression parser A new expression parser allows to specify complex conditions ...
<input type="text" name="name" value=""><br> <input type="submit" value="Submit"> </form> </body> </html> ``` 当用户填写表单并点击“Submit”按钮时,数据会被POST到指定的CGI脚本,然后由脚本处理并...
<h1>欢迎来到我的个人主页</h1> </body> </html> ``` 5. 给 `/home/aa` 目录添加执行权限,以便 Apache 服务器可以访问个人主页: ``` chmod 755 /home/aa ``` 6. 重启 Apache 服务器以应用修改的配置: ``` ...
echo "<html><body><h1>vhost1</h1></body></html>" > vhost1/index.html echo "<html><body><h1>vhost2</h1></body></html>" > vhost2/index.html ``` ##### 6. 用户认证配置 为了增加安全性,我们可以为某个虚拟...
[root@server2 html]# echo "<html><head><body><h1>Myiskangshuo</h1></body></head></html>" > /var/www/html/index.html [root@server2 html]# cat /var/www/html/index.html <html><head><body><h1>...
1. 解压缩源码包:`tar -zxvf httpd-<version>.tar.gz` 2. 配置安装目录:`./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/bin/apu-1-config --with-pcre=...
* `--enable-<FEATURE>[=ARG]`:明确指明静态编译某一属性或模块到 httpd 二进制文件 * `--disable-<FEATURE>`:明确指明不静态编译某一属性或模块到 httpd 二进制文件 * `--enable-modules=<MODULE-LIST>`:明确...
伪静态软件<br>在IIS的Isapi上添加这个筛选器<br>筛选器名称Rewrite<br>可执行文件选择 Rewrite.dll 即可以了<br><br>httpd.ini是配置文件,应该不要我多说了吧,很简单的
<title>hujiahui</title> </head> <body> <?php echo 'Hello, world!'; ?> </body> </html> ``` - 保存位置: `C:\Program Files\Apache Software Foundation\Apache2.2\htdocs` - **访问测试页面**: - ...
<title>Welcome to Web1</title> </head> <body> <h1>Success! Web1 home page!</h1> </body> </html> ``` 这将创建一个简单的网页,并且可以通过访问 `http://192.168.3.21` 来访问。 本文档提供了在 CentOS ...