windows下apache并发php,windows环境下apache死机问题的解决一例

 2023-09-09 阅读 11 评论 0

摘要:问题描述:一个很简单的内容发布系统,采用win2000+apache2.0.50+mysql4.1+PHP5.0.0+zendOptimizer,查询简单,负载很低。文章条数大概超过10000后,打开首页大概要10多秒钟,apache很快就僵死(进程淤积、耗尽内存)

问题描述:一个很简单的内容发布系统,采用win2000+apache2.0.50+mysql4.1+PHP5.0.0+zendOptimizer,查询简单,负载很低。

文章条数大概超过10000后,打开首页大概要10多秒钟,apache很快就僵死(进程淤积、耗尽内存),页面就只出现最上面的一点点静态(非数据库)内容,只有停止再开始apache才行,

一开始为了对付,每天设置计划任务,大概stop->start apache几次,现在随着内容增多,频繁死机,无法忍受。

解决过程:在网上查了N多资料,发现这个问题还是比较普遍,尤其是据说windows版本

1, 怀疑apache版本低了,内存泄漏,有文章提及在httpd.conf文件中添加Win32DisableAcceptEx 标记,如下:

apache windows部署。ThreadsPerChild 250

MaxRequestsPerChild50

Win32DisableAcceptEx

以及对apache并发连接,keepalive参数,timeout等一系列调节,没有太多效果,反而感觉僵死更快

不过apache的内存确实一直不怎么释放,一直在上升,看来在windows下apache的多线程模型实现的有些问题(新版本呢?)

2,又过了一段时间,继续查找,有说是MySQL问题,并且说明mysql问题的解决方法

apache并发模型、开始以为mysql版本弱了,另外一台服务器上试验升级到mysql5,首先碰到mysql字符集问题,介绍方法也很多,不过我最终还不是很明白,

而且不小心用myadmin操作了旧服务的mysql4,把原来的系统也搞破坏了,那个急啊!幸亏......

积累了一个经验,要是不小心把字符集弄错了,可能是个很麻烦的事情,有一个简单办法,运行MYSQL安装bin目录下的配置向导,然后重新配置一遍!

然后又碰到mysql权限和远程访问问题:ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server

再网上查到解决方法:GRANT ALL PRIVILEGES ON *.*TO 'root'@'10.10.40.54' IDENTIFIED BY '123456' WITH GRANT OPTION搞定

做完了后没有任何改观,看来不要把全部希望寄托在软件版本上,还是要立足于找到问题关键

apache重启、3,开始回头分析再php设计里面有不合理的查询,用下面的方法可以找出慢的mysql查询:修改my.ini文件再重启服务

log-slow-queries = slow.log//windwos下直接写这句,不带路径时候自动生成到 mysql的data目录下

long_query_time = 5//超过5秒的查询都记录日志

通过这个方式,确实找到了几个慢查询,清理了几个垃圾,效果要好多了,但还是有点慢

4,在这个快要崩溃的时候,重新看了一下《MySql故障排除》,发现排除故障时还是这种案例解决的最有参考价值,照着做了下(my.ini):

#取消文件系统的外部锁

php apache mysql?skip-locking

#不进行域名反解析,注意由此带来的权限/授权问题

skip-name-resolve

#索引缓存,根据内存大小而定,如果是独立的db服务器,可以设置高达80%的内存总量

key_buffer = 512M

#连接排队列表总数

apache并发量?back_log = 200

max_allowed_packet = 2M

#打开表缓存总数,可以避免频繁的打开数据表产生的开销

table_cache = 512

#每个线程排序所需的缓冲

sort_buffer_size = 4M

apache2 php,#每个线程读取索引所需的缓冲

read_buffer_size = 4M

#MyISAM表发生变化时重新排序所需的缓冲

myisam_sort_buffer_size = 64M

#缓存可重用的线程数

thread_cache = 128

php运行apache的包、#查询结果缓存

query_cache_size = 128M

#设置超时时间,能避免长连接

set-variable = wait_timeout=60

做到查询结果缓存的时候,眼睛一亮,有希望,赶快重启mysql!第一次运行还是花了几秒,可以理解,第二次又花了几秒,有点失落,

再刷了几次,终于快了起来,还是缓存管用啊!而且mysql不愧为速度最快的SQL数据库,这种非事务处理环境确实很强。

phpstudy apache启动后停止?5,小结

就是一个简单的缓存,问题总算缓解了,为什么Mysql不把缓存自动设置一下,大多应用系统没那么多复杂和众多的不同查询吧。

但是apache确实还是有点内存不释放的问题:[1]windows下据说换成iis要好一些;[2]MaxRequestsPerChild 设置一个较小的值,如50,进程就可以经常重新来一下,淤积情况好一些了。

暂时不影响使用了,以后问题大了再说吧......

总之,不要什么东西都指望版本升级,准确找到问题,然后这些系统软件本身也会有很多选项的。

6,部分参考:

php apache。Window下APACHE的Win32DisableAcceptEx的问题

MySql故障排除 routerpipe/archives/2007/403.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/28993.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息