Apache今天发布其2.2.18版本了,Changelog里面看到修复改进还是不少的值得期待的一个版本。后续再陆续验证测试。
今天发现Apache启动的一个很奇怪的问题,apache在运行的时候,机器突然拔电暴力测试。当机器重启后,启动脚本调用的是apachectl restart。重启过程中出现了比较诡异的问题,脚本备hup(挂住)住了。多次未检查出原因。
突然想起在《Understanding The Linux Kernel》中的说过,不要用一个pid来标识一个应用程序,因为很可能pid用完后,新建程序进程回滚到原来的pid。而apache在调用restart的时候,先去读取httpd.pid文件中先前进程的pid值,并向其发送一个SIGNALHUP信号,而启动意外挂掉重启,没有执行stop指令,pid文件没有被移除,于是再次调用restart的时候,会认为该进程pid号是存在的,仍然会发送一个SIGNALHUP信号给该进程号。由于系统刚启动,恰巧这个进程号已经被新的进程占用了,而apache发送的这个HUP信号,发送给了另外的新进程,导致系统出现了异常,被挂起。
最后的解决方案是,系统在初次启动过程中,在调用apache的restart之前,先remove掉该http.pid文件,保证不会发送HUP信号。
阅读(5984) | 评论(0) | 转发(0) |