apache不断占内存过大,导致虚拟机内存不足,处理方法。
我用512M的vps,访问量不大,但内存占用很大,甚至宕机。
我用top,然后shitf+m发现,httpd占用内存极大。经过网上找资料设置后,用过一段时间终于没再出现内存问题了。
首先查找配置文件的位置,可以用如下命令:
find / -name httpd.conf
找到配置文件/usr/local/apache/conf/extra/httpd-mpm.conf,修改设置Apache MPM Prefork模块
StartServers 3
MinSpareServers 2
MaxSpareServers 5
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 40
我原来的MaxRequestsPerChild是为0,问题应该在此。
StartServers设置了服务器启动时建立的子进程数量
MinSpareservers和MaxSpareServers分别设置空闲子进程的最小和最大数量
ServerLimit则是控制MaxClients所能使用的最大值。缩减MaxClients能让运行动态内容(比如:WordPress)的服务器有很大的改变。如果你的VPS遭遇到流量的大幅增加,而你的MaxClients设置的太高的话,你的服务器将会无限循环工作于从物理内存交换页面到虚拟内存中,最终导致宕机。一般计算适当的MaxClients值取决于你总共可用的系统内存除于每个Apache进程使用的内存。例如,如果你还有500MB的内存可用于Apache,每个Apache进程大约使用20MB的内存,你可以设置你的MaxClients为(512-12)/ 10 = 50(这个计算好像原文中有误)。使用命令top可以得到你VPS实时内存的使用。
MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程佔用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。如果 MaxRequestsPerChild预设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果佔用了200~300M内存,即使负载下来时佔用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成50、100、200,以防内存溢出。
找到配置文件/usr/local/apache/conf/extra/httpd-default.conf,修改KeepAlive设置
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 30
#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to “Off” to deactivate.
#
KeepAlive On
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 120
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5
Timeout是一个连接多少时间后断开,这个参数设置在30-60是一般的php程序都是适用的,至少要运行一些要占用大量时间的php程序,那么适当调高也是可以的,但请不要太高,否则会影响apache性能,本次优化我们使用30就很足够了。
MaxKeepAliveRequests 是一个连接最大的请求量,对于页面有较多的图片等元素,可以适当调高一点,对于一般的网页设置在80-120是足够的,我们就设置为120,如果设置太高会导致httpd长时间不能退出释放内存的。
KeepAliveTimeout 是当用户处理一次连接时,如果在该参数的时间内还有请求则会继续执行,不需要重新创建新的连接,直到达到MaxKeepAliveRequests的最大值才会退出。对于perfork模式下的,有人认为是将KeepAlive Off会比较好,但是对于绝大多数的网站都会不多不少有些图片元素,所以将该项打开,并将KeepTimeOut设置在2-5秒,不但有效提高服务器性能,也能加快页面打开速度。
如果还需要优化可以考虑修改启动的模块,Wordpress主要使用以下模块,保留这些其他的可以注释掉
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule negotiation_module modules/mod_negotiation.so
apache不断占内存过大,导致虚拟机内存不足,处理方法。的更多相关文章
- 牛客网Java刷题知识点之内存溢出和内存泄漏的概念、区别、内存泄露产生原因、内存溢出产生原因、内存泄露解决方案、内存溢出解决方案
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- 内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别
内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态 内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数 ...
- 如何设置Java虚拟机内存以适应大程序的装载
Java虚拟机对于运行时的程序所占内存是有限制的,当我们的项目或者程序很大时,往往会照成内存溢出. 举个例子: public class SmallTest1 { public static void ...
- 关于ThinkPHP执行长时间任务可能导致PHP使用内存越来越大的问题
ThinkPHP执行长时间任务时,可能导致PHP使用内存越来越大,最后因为内存超出配置限额而程序挂掉. 其实这在很久以前就无意之中发现的一个问题. 3.x之前有这个问题,5.0以后的,应该是已修复了的 ...
- windbg分析一次大查询导致的内存暴涨
项目上反馈了一个问题,就是在生产环境上,用户正常使用的过程中,出现了服务器内存突然暴涨,客户有点慌,想找下原因. 讲道理,内存如果是缓慢上涨一直不释放的话,应该是存在内存泄漏的,这种排查起来比较困难, ...
- Java线程池队列吃的太饱,撑着了咋整?java 队列过大导致内存溢出
Java的Executors框架提供的定长线程池内部默认使用LinkedBlockingQueue作为任务的容器,这个队列是没有限定大小的,可以无限向里面submit任务. 当线程池处理的太慢的时候, ...
- android app性能优化大汇总(内存性能优化)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
- ANDROID内存优化——大汇总(转)
原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了20 ...
- ANDROID内存优化(大汇总——中)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
随机推荐
- Remove openjdk in Ubuntu/Configure jdk and running adb in 64-bit Ubuntu
sudo apt-get autoremove openjdk-7-jre sudo apt-get purge openjdk* java -version No openjdk available ...
- excel 转换日期
早上一朋友问我excel中如何将类似这样“19850421”的文本日期转换为“1985-04-21”.我的第一反应就是直接设置单元格格式为日期,于是打开excel试了试结果显示“########### ...
- Bootstrap-datetimepicker年月日
<div class="input-group date form_date" data-date="" data-date-format="y ...
- [置顶] Android 2016新技术
版权声明:分享技术,传播快乐.如果本博客对你有帮助,请在我的博客首页为我打赏吧! 2016你需要了解Android有以下新兴的技术与框架,有些也许还不成熟,但是你应该去了解下,也许就是未来的方向. K ...
- lucene5学习 - 索引基本操作(创建,查询,更新,删除,分页)
package lucene5; import java.io.IOException; import java.nio.file.Paths; import java.text.SimpleDate ...
- Github上有趣的资料 | JS
留着,以后用得着,原文地址:http://www.jianshu.com/p/7c9aa9508641 collection AlloyImage 基于HTML5的专业级图像处理开源引擎.An ima ...
- Ubuntu 14.10下搭建简易FTP服务器[vsftpd]
Ubuntu下公认最易上手的ftp软件是vsftpd,既然标题都说了是“简易”的,那么必然是用最大众的..下面是正题 目标需求:搭建一个允许匿名/本地登录的FTP,并且支持上传/下载/修改功能,同时F ...
- 从UWP到SWIFT-页面间反向传值
页面1跳转到页面2,在页面2点击button后,页面1的内容被改变.实际使用 protocol(就是c#中的interface),将页面1的viewcontroller转换为protocol传入页面2 ...
- Enable rsh on MAC OS with command line
1. Enable rsh on macos. 1). os version (10.0) Enabling the "Allow remote login" option tur ...
- maven 配置
四.eclipse配置maven eclipse---window---maven------User Settings: 之前设置的仓库的位置: 五.idea15配置maven idea14---s ...