前几天一朋友给我说,他帮两个政府单位服务的两个网站,差不多同时间出现了访问一段时间后,网站打开就非常慢的情况.主机环境是windows2003+apache+php+mysql,但如果把apache重启一下就OK,又非常快.

我的第一反应就是apache的线程不够用,看了一下错误日志,的确也提示线程不够了,修改了一下apache的线程

<IfModule prefork.c>StartServers8MinSpareServers 5MaxSpareServers20MaxClients150MaxRequestsPerChild1000</IfModule><IfModule worker.c>StartServers2MaxClients150MinSpareThreads25MaxSpareThreads75 ThreadsPerChild25MaxRequestsPerChild 0</IfModule><IfModule mpm_winnt.c>ThreadsPerChild 250MaxRequestsPerChild 0</IfModule>

,重启了一下,回来了.感觉是没问题的.结果过了三小时左右....又这样了.

既然改了不管用,那就换成IIS,倒腾了一翻之后,换成了PHP+IIS+MYSQL,用着也挺爽,结果第二天发现....还是用着用着就变慢了...

这.... 通过IIS的日志发现,出现了非常多的500错误,错误文件是api/get_keywords.php 这个文件,打开一看

<?phprequire '../include/common.inc.php';include phpcms_ROOT.'api/keyword.func.php';echo get_keywords($data, $number);?>

而get_keywords的方法中...既然....

define('API_URL_GET_KEYWORDS', 'http://tool.phpcms.cn/api/get_keywords.php');.....$http->post(API_URL_GET_KEYWORDS, array('siteurl'=>SITE_URL, 'charset'=>CHARSET, 'data'=>$data, 'number'=>$number));

看来问题很明朗啦!在后台添加新闻的时候,会自动调用这个api来获取关键词,而因为是内网,无法远程获取到...那就无限500了...

解决办法非常简单:

<?phprequire '../include/common.inc.php';//include PHPCMS_ROOT.'api/keyword.func.php'; //echo get_keywords($data, $number);?>

这两行注释掉吧,反正不用了....别载入了...

通过一周左右的观察,问题不在...看来与IIS或APACHE无关... 平时出现问题,也不能光看error中的错误日志,像正常日志中的错误状态也要分析分析呀...哈哈哈.完结...