关闭

[notice] Parent: child process exited with status 3221225477 -- Restarting.

1158人阅读 评论(1) 收藏 举报
分类:

        环境:Apache 2.2.22+PHP 5.2.6+MySQL 4.0.26+Openssl 0.9.8h

        现象是:一个使用HTTP访问的系统,加入HTTPS后,系统频繁地、随机地自动挂机,每次会自动重启。有多频繁呢?非常频繁,系统简直没法正常运行。无耐到最后,我们又用回了HTTP和HTTPS两者并行,而当初,屏蔽掉HTTP是出于安全检查很大的压力。但两者虽并行,问题并未解决:HTTP和HTTPS并行的系统,仍一天要出现几次自动挂机。

           我刚开始在解决这个头大的问题时,更倾向于以:HTTPS   系统自动崩溃  等关键字去搜索。但能搜到的结果并不多,很多的文档都是:怎样配置HTTPS。其实,一个问题能否找到正确答案或者要多久才能找到解决方法,一个很大的因素是:你能否正确定位出错误,并以准确的关键字去搜索。我向厉害的同事请教问题,我跟他们一描述问题,他们去网上搜索的关键字与我搜索的往往有较大的差异,而他们搜索出的结果更贴近正确的解决方法。后面去Apache的错误日志error.log 中去找原因。这仍然很头大:error.log 里错误信息并不只一种:譬如:child process exited with status 4294967295  、Parent: child process exited with status 3221225477 等等。 再根据系统表现出来的崩溃的时间和错误日志、及错误日志里错误出现的次数,初步将我们的系统在加入HTTPS后报出的错误定位为:[notice] Parent: child process exited with status 3221225477 -- Restarting.

           稍微有点头绪了,根据这个错误去网上找答案。映入眼前的是一个很诱人的解决方案:复制PHP的php5apache.dll和libmysql.dll 到WINDOWS/System32 目录下,(详情见网页:http://hi.baidu.com/mailluzhou/item/b8e4bd34a248b2f2e6bb7a0a)。这简直是一个简单的有点暴发户的解决方法。但我的不容易相信的性格迟迟未尝试该方法:为什么需要这样子做,我这次只是使用Openssl 对系统的访问方式增加了HTTPS,为何需要复制这两个dll? 没有人给我答案来解答我心中的这些疑问,so 我停住了,再找找方法看看。

           Day end,无解;Day End,无解;... ...  所知不多,再加之不容易相信的性格,很多天,都处于一种焦虑的找寻答案但无任何进展的状态、每天都听到系统又挂了的消息。我即将疯了。

           为什么会出现“exited with status 3221225477 ”的错误信息,该错误出现有哪些原因,从网上查的大概有下面几种:

          1、代码问题,产生了递归超限或死循环,导致系统内存不足,可使用xdebug+ WinCacheGrind来调试。该工具在出现问题时会停在那里,而不是重启服务。

          2、复制 libmysql.dll 文件到 windows\system32 下。(参考网址:http://www.java-samples.com/showtutorial.php?tutorialid=1050),我看了好几遍这篇文章,那么多人说可以成功,我也有些相信了。该方法是否的确值得一试呢?

          3、这个页面中分析了报错可能有很多原因,而不仅仅是简单的复制dll到根目录下(http://blogtech.acewill.cn/?cat=4

          

         4、另外一篇也是介绍说是php加载的dll的原因(https://moodle.org/mod/forum/discuss.php?d=211190&parent=920552),并附带提供了

               PHP下怎么配置dll的地址(http://php.net/manual/en/install.windows.extensions.php),

               根据这个,我自己找了一篇Apache 的LoadModule 方法的配置(http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/index.html

         5、又找到一篇较靠谱的讲该错误出现的原因(http://stackoverflow.com/questions/10306272/apache-crashing-parent-child-process-exited-with-status-3221225477-restarti

       

         6、更有甚者:修改PHP配置文件:php.ini 文件中,注释掉 error_log 即可(https://bugs.php.net/bug.php?id=37765

        

         7、CSDN 里有人发帖来说这方面的问题:http://bbs.csdn.net/topics/110075915

         8、有人得出的解决心得是:At last, I find the cause. PHP+APACHE must be compatible.

         9、有人说是:imagecreatefromjpeg 函数导致的,当上传一个将图片后缀由 .gif  转变为 .jpg 的文件时报出该种错。

         10、有人说,修改 php.ini 中memory_limit 来解决内存问题。

       很多种解决方案呀。对于该问题的出现,我还是最信奉这个解释:C0000005  由WINDOWS核心发出的一般性保护错误  0xC0000005L
只要是APACHE本身或用到的DLL(如果用内嵌方式运行PHP,也就包括PHP及其用到的第3方DLL或SO)崩溃,都会产生这个WIN错误!

       我觉得是配置文件的问题。而且,比较我们的系统的前后变化,也是比较说的过去的:https 有加载SSL 模块,这是HTTP所未加载的。

      

      系统自动崩溃的过程中,还出现过另一种错误:out of dynamic memory in yy_create_buffer() in Unknown on line 0

      该种错误的出现原因,找到一篇没说什么的文章(http://stackoverflow.com/questions/1112540/out-of-dynamic-memory-in-yy-create-buffer),只是知道,这个错误与exited with status 3221225477 是一起出现的。至于是谁引发的谁,就不得而知了。

      从日志来看,错误:child process exited with status 4294967295 也是有导致系统崩溃的。出现该错误时,系统的“事件查看器”中也有应用错误出现:

        (libapr-1.dll正是apache的内存管理模块)

该错误网上解释说是:0xffffffffL   该内存不能为read 。我知道我们的系统有些SQL、有些程序、有些报表导出功能,执行效率低,可能会造成内存不足。但,这跟加入HTTPS没多大关系。 我们最开始也是想:HTTPS 进行密集的加解密运算,对服务器压力大,这点导致系统自动崩溃也似乎是说的过去的。于是我们有进行一次数据清理,但清理后对于系统崩溃的问题,并无什么帮助。并且,从系统崩溃的时间来看:在系统压力小、使用人数较少的时候,也有出现Crash--->restarting  的情况。

      所以我对自动频繁崩溃定位为两方面:1是系统程序问题,导致内存不足,会造成系统崩溃;2、加入HTTPS后,未找到原因的这个,导致系统频繁崩溃,这个才是恶魔。

      我试图在测试环境重现该问题,从测试环境的日志看,也有出现“[notice] Parent: child process exited with status 3221225477 -- Restarting.”的错误日志,但我们就是无法重现。这其实也是最棘手的,因为不能重现问题,那么问题怎么解决,能否解决便没有保证。这点带来的没有信心也拖慢了解决问题的脚步:因为测试环境不能验证一些方法是否正确,便只能一遍一遍的上网冲浪,试图找到说服自己、看起来正确的解决方案,并小心谨慎地、以破釜沉舟的心态,去生产环境去验证。这是我的心态,我是胆小的,我也是个谨慎的人,我不愿实施一个说服不了自己的方法、更不太愿接受徒劳无功的工作。我于是耗着、耗着、一遍一遍的看、想。而其实,实践才是检验真理的唯一标准。在测试环境用Apache的压力工具试图重新错误,但失败了。Apache自带的压力测试工具ab的学习资料(http://jxtm.bsdlover.cn/?p=326),当为HTTPS页面时,使用abs 方法。

      为了找到可能的原因,学习了一些相关的知识:

      a、Apache下配置SSL的方法。因为我有想过,是不是我本身SSL配置就不正确。

               中文浅显版:http://www.blogjava.net/sham2k/articles/163985.html

               英文深入版:http://tud.at/programm/apache-ssl-win32-howto.php3

      b、SSL配置文件(ssl.conf)中参数配置说明(http://www.modssl.org/docs/2.8/ssl_reference.html),因为从网上找的资料,隐隐约约觉得,是不是我的SSL配置参数(SSLSessionCache)的配置不正确。我们的配置该值是:dbm, 而有一篇文章里说,应该配置为 shm。说dbm 的方式,在高负载的情况下可能会遭遇可靠性问题。我不知道这个可靠性问题是指一些什么问题,包不包括系统自动崩溃。但是我在modssl 的配置说明中,看到这么一句话:推荐使用dbm。我晕了,我本就是这里听一句,那里信一句,到底 SSLSessionCache 要怎么配置了,到底这个配置跟Apache自动崩溃有没有关系呢?

           

          c、OpenSSL 的下载地址(http://www.openssl.org/source/),我甚至想过,是不是我们的openssl版本 不兼容php、Apache的版本。与OpenSSL相关的2个dll 为:ssleay32.dll 、libeay32.dll

          d、mod_ssl的下载地址(http://www.modssl.org/),是不是HTTPS加载的ssl_module 模块文件的问题。从这里,倒看出mod_ssl 单独安装目前可适用于Apache的最高版本为 Apache 1.3.41,而其他的均是与Apache的安装文件捆绑在一起的,并不需要单独安装。

            

                http://www.modssl.org/

 

          我要疯了,至少我是真晕了,很多的解决方案,却又似乎没有任何一种是我的解决方案。我abs 压力来,压力去,那个错误就是不能被我重现。

          还找到一些比较中肯的话:

                  Apache 为何会自动重启,是因为那些子进程均因超时而结束时,服务便重启了;

                  如果是加载的模块的问题,那为什么不是一加载就出现错误,而是在系统运行中偶发性地出现呢?

                  建议打开PHP的错误日志进行查看;

 

          写了这么多,我似乎有意忽略了一些东西,便是:我们的系统随机性地、频繁地自动崩溃 到底可能是什么原因造成的?这么多天过去了,我是否有看出一些蹊跷?

          我们的系统最开始是买的,然后是自己二次开发的,中间改了很多的东西。而在我手里,我曾经因为安全检查,做过这么一件事:将Apache的版本由2.2.9 升级为 2.2.22

是的,当时只是复制了2.2.22 版本里的几个dll 到2.2.9 的文件夹里,当时我们常用的功能测试正常,我便屁颠屁颠地以为Apache版本升级成功了。而当时一些modules 目录并未同步覆盖。我现在打开Apache的Monitor,里面显示这样的信息:

                 

       没看出什么异常? Apache的版本是2.2.22, 但是Apache加载的模块mod_ssl 的版本是2.2.9. 这应该是我之前升级Apache的版本时留下的后遗症:Apache并未完全升级。  嗯,前面我这么强调mod_ssl 的单独安装和捆绑安装,便是因为,我所想:是不是就是因为Apache与之加载的模块mod_ssl 模块不一致导致的。因为网上没有找到说法:如果这两者的版本不一致会怎么样。   所以,我一遍一遍的,晃来晃去,迟迟没有做什么的动作。

       我有些熬不住了,再不试试。我的想法就是:将Apache的版本由2.2.22 还原至 2.2.9。看是否就是Apache与之加载的mod_ssl.so 的版本不一致所导致的。我以破釜沉舟的想法,如果不是这个原因,then  I will give up. I will really need help instead of searching the internet only!

       疑问依旧在:

      Apache在什么情况下崩溃;Apache在调用哪个dll或模块的时候崩溃;Apache崩溃的时候,数据库有无崩溃?

 

       明天打算尝试还原Apache的版本。希望成功。                          

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:63944次
    • 积分:786
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:19篇
    • 译文:0篇
    • 评论:1条
    最新评论