当前位置: 首页 > 网站开发 > 正文

阿里云主机内存使用率100%分析

关键字:
1 星2 星3 星4 星5 星 (暂无评分)
Loading ... Loading ...
baidu_share

最近我的网站从阿里虚拟主机迁移到阿里云。使用apache+php+mysql架构。mysql使用了最新5.7版本。

现象:网站启动,不到10分钟,用客户端连接阿里云主机,连接不上。网站打不开了。只能重启阿里云主机。

分析:用top命令分析内存使用情况,mysql达到了35%。查了一些资料,mysql默认参数performance_schema_max_table_instances设置为12500,暂用了很多内存,将其改小。

performance_schema_max_table_instances=600
table_definition_cache=400
table_open_cache=256

改变参数后,问题依旧。使用低版本mysql问题解决。

用ps -ef | grep httpd 发现了四个httpd进程。

用top命令发现,2个httpd进程,分别占用了35%和36%内存使用率。再查看apache日志,由于内存已满,不能再输出。

解决问题方法:重新编译apache,支持mpm,使用worker方式。–with-mpm=worker

修改httpd.conf:

<IfModule mpm_worker_module>
  ServerLimit 1
  ThreadLimit 100
  StartServers 1
  MaxClients 1024
  MinSpareThreads 2
  MaxSpareThreads 5
  ThreadsPerChild 100
  MaxRequestWorkers 100
  MaxConnectionsPerChild 300
</IfModule>

问题解决。

由于我使用单核cpu,没有必要使用2个进程。
ServerLimit 35 //最多可以启动35个进程
ThreadLimit 200 //每个进程最多可以启动200个线程
StartServers 5 //启动apache时,首次启动5个进程
MaxClients 2400 //最多支持2400个并发的http链接
MinSpareThreads 100 //最少有100个线程空闲,否则新增加进程或者线程了
MaxSpareThreads 200 //最多有200个线程空闲,否则就要自动回收多余空闲的线程或者进程
ThreadsPerChild 80 //启动一个进程时,此进程首先启动80个线程
MaxRequestsPerChild 0 //允许每个进程在它的生命周期内处理的http最大请求. 0没有限制。 Limit on the number of requests that an individual child server will handle during its life. If MaxRequestsPerChild is 0, then the process will never expire.

MaxRequestsPerChild 建议不要配置0,会造成内存无限制使用。

其中ThreadLimit指令值一定要大于等于ThreadsPerChild, 且ServerLimit*ThreadsPerChild的值一定要大于MaxClients

本文固定链接: http://www.chepoo.com/aliyun-host-memory-usage-analysis-100.html | IT技术精华网

阿里云主机内存使用率100%分析:等您坐沙发呢!

发表评论