热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

httpd.exe占用cpu100%解决办法

httpdexe是apache的一个进程,有了它我们的网站才正常运行,但最近我发现我的httpdexe占cpu100%一直高居不下,下面我来分享一些解决办法。

httpd.exe是apache的一个进程,有了它我们的网站才正常运行,但最近我发现我的httpd.exe占cpu 100%一直高居不下,下面我来分享一些解决办法。

网上说了是我们没有限制apache的并发数与子进行数,后来百度得出下面代码,编辑httpd.conf

  1. Win32DisableAcceptEx ##加入这行 
  2. ThreadsPerChild 250 
  3. MaxRequestsPerChild 0 

重启apache就解决了。

MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。

如果MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出

另一种解决办法

如果你以前是没有问题,突然有问题了而且服务器安装了金山毒霸,这个可能是金山毒霸或者升级精灵修改了WINSOCK导致

解决办法

在win命令行cmd下,输入以下命令

  1. netsh winsock reset 

还有可能碰到一种情况就是否cpu没有点,内存占很高或突然卡死过一会就好了,这个解决办法可尝试在httpd.conf加入

  1.  
  2. ThreadsPerChild 1000 
  3. MaxRequestsPerChild 10000 
  4. Win32DisableAcceptEx 
  5.  

最后上面的办法解决了不根本的问题,我们可以对apache进行优化,最常用的就是apache缓存优化。

apache缓存分为两种缓存模式(mod_disk_cache与mod_mem_cache):

mod_disk_cache

一个基于磁盘的存储管理模块。

基于硬盘文件存储的缓存由mod_disk_cache 模块实现:

  1. CacheDefaultExpire  3600 
  2. CacheMaxExpire  86400 
  3. CacheLastModifiedFactor  0.1 
  4.  
  5. CacheRoot  /usr/local/apache/cache 
  6. CacheEnable disk / 
  7. CacheDirLevels 5 
  8. CacheDirLength 3 
  9. CacheMaxFileSize  10000000 
  10. CacheMinFileSize  1 
  11.   
  12.  

拷贝上面内容到apache 的 httpd.con文件中,在httpd.conf文件中搜索:

  1. #LoadModule cache_module modules/mod_cache.so  // 去掉前面的# 号 

使用磁盘文件缓存:

  1. #LoadModule disk_cache_module modules/mod_disk_cache.so  // 去掉前面的# 号 

mod_mem_cache

一个基于内存的存储管理模块。mod_mem_cache可以被配置为两种不同的操作模式:①缓存打开的文件描述符;②在堆(heap)上缓存对象。mod_mem_cache既可以用于缓存本地生成的内容,也可以用于为反向代理模式下的mod_proxy缓存后端服务器输出的内容。

基于内存的缓存主要由 mod_mem_cache 模块实现:

  1.  
  2.  
  3. CacheEnable mem / 
  4. MCacheSize 4096 
  5. MCacheMaxObjectCount  2000 
  6. MCacheMinObjectSize 1 
  7. MCacheMaxObjectSize 2048 
  8.  
  9.  

安装完成之后,需要搜索

  1. LoadModule cache_module modules/mod_cache.so  // 去掉前面的# 号 

使用内存文件缓存:

  1. #LoadModule mem_cache_module modules/mod_mem_cache.so  // 去掉前面的# 号 

推荐阅读
author-avatar
手机用户2502883445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有