ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Apache 20014导致Windchill无法使用的问题

Apache 20014导致Windchill无法使用的问题

原创 Linux操作系统 作者:benjamin_ZX 时间:2010-07-22 08:53:31 0 删除 编辑

apache 20014导致Windchill无法使用的问题

 

 

  周一刚上班就接到Windchill业务管理员的电话,说Windchill应用现在无法使用,重启了应用也没效果。因为是生产环境,情况比较紧急。上周日应用人员做的唯一改动就是做data load(分类搜索无法使用),但据反映data load做了7,8个小时也没结果,系统也没有抛错。之后应用人员就让这个操作放在后台跑没有去管它了。

  进入应用所在的OS,查看文件系统空间。发现应用所在的文件系统空间满了,问题似乎有了进展。找到这个文件系统下占用空间较大的排名靠前的目录。最后找到一个logs目录,进入目录找到一个20几G的日志文件。删除日志后重启系统,还是不行。仔细检查启动日志发现apache启动报错:

#./apachectl start
(20014)Error string not specified yet: Error retrieving pid file logs/httpd.pid

 

ps一下httpd进程真的是没有起来,页面当然也是打不开了。在apache目录下定位到httpd.pid这个文件,跟测试机的比较了一下。权限,属主什么的都相同,唯一不同的是文件大小。查看文件内容发现生产环境的这个文件是空的。测试环境的这个文件有个数字(我猜测这个就是PID)。

 

到网上找了些apache的资料,发现apache启动的时候要读取这个httpd.pid文件。httpd.pid这个文件固定了apache的进程状态,httpd.pid文件的内容其实就是apache在服务器中的pid进程号,apache每次启动都会有获得一个不同的pid号,然后把这个pid写入httpd.pid文件,进程间通信就以这个pid进行。apache在启动后,保持这个pid值不变,直到下次重新启动apache。

 

好了,既然是这么回事我可以往这个文件里也写一个进程号。但是为了不和现有生产环境的PID同名,我尝试改名这个文件(相当于删除),然后重启apache。结果apache能正常启动,ps一下进程:

#ps -ef|grep httpd
  nobody 217118 172584   0 09:04:14      -  0:35 /ptc/apache/bin/httpd -d /ptc/apache -k start
  nobody 311704 172584   0 09:04:14      -  0:00 /ptc/apache/bin/httpd -d /ptc/apache -k start
  nobody  78544 172584   0 09:04:14      -  0:33 /ptc/apache/bin/httpd -d /ptc/apache -k start

  root 172584      1   0 09:04:14      -  0:00 /ptc/apache/bin/httpd -d /ptc/apache -k start

 

注意我标红色pid跟httpd.pid的文件内容是一样的。

#cat httpd.pid
172584

 

后来在测试机上进一步实验发现:如果在apache启动好的情况下(httpd进程运行正常),如果你将httpd.pid文件清空,这时是无法关闭apache的。报错信息跟上面一样:

(20014)Error string not specified yet: Error retrieving pid file logs/httpd.pid

 

如果你正常的关闭apache,httpd.pid这个文件会自动消失,启动后会自动创建,并把apache的进程号写入这个文件。

 

如果关闭apache后我手工创建httpd.pid这样一个文件,并写入内容123456,apache启动后会发生什么现象呢?#cat httpd.pid
      123456

#./apachectl start

#ps -ef|grep httpd

nobody  970770 1118328   0 10:26:39      -  0:00 /ptc/apache/bin/httpd -d /ptc/apache -k start
  nobody 1093734 1118328   0 10:26:38      -  0:00 /ptc/apache/bin/httpd -d /ptc/apache -k start
    root 1118328       1   0 10:26:38      -  0:00 /ptc/apache/bin/httpd -d /ptc/apache -k start
  nobody 1122374 1118328   0 10:26:39      -  0:00 /ptc/apache/bin/httpd -d /ptc/apache -k start

 

httpd的进程并不是我指定的123456,而是1118328.现在查看httpd.pid文件的内容:

#cat httpd.pid
1118328

 

问题讨论到这,使我们对httpd.pid文件在apache中的作用有了全面的了解。关于引起这个问题的原因,我想可能是这样的:

日志暴涨:data load的时候发生异常,导致日志疯长。

httpd.pid文件为空:反复重启应用的时候,apache不能正常关闭(httpd.pid文件为空,可能是文件系统满导致的异常。),但启动关闭脚本里有强行杀httpd进程的语句,这样导致httpd进程强行结束了,但httpd.pid这个空文件依然存在。


 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24106960/viewspace-668682/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-06-17

  • 博文量
    69
  • 访问量
    39488