Chinaunix首页 | 论坛 | 博客
  • 博客访问: 323456
  • 博文数量: 34
  • 博客积分: 860
  • 博客等级: 准尉
  • 技术积分: 524
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-23 12:04
文章存档

2011年(16)

2010年(7)

2009年(4)

2008年(7)

分类: LINUX

2011-05-12 22:44:55

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信号。
阅读(5904) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~