前言

这篇文章以我的阿里云服务器为例(你眼前的博客正是搭在这个服务器上),阐述下小型网站(Linux+Apache+MySQL+PHP)对于内存利用率提升的配置方法的一个点。

正文

我的服务器是阿里云的,在一年前由于数据库(MySQL)频繁内存不足宕机就“潇洒”地升级了配置到2G内存。所以,目前机器的配置如下:

CPU: 1核
内存: 2048 MB
操作系统: CentOS 6.5 32位
公网IP: 115.28.36.19
带宽计费方式: 按固定带宽
当前使用带宽: 1Mbps

同时,正常使用情况下的内存使用情况如下:

linux 内存mysql与apache占用
linux 内存 mysql 与 apache 占用

图中显示 MySQL 占用 440m,Apache 占用 44m。当然,这是MySQL 服务和 Apache 服务刚刚重启后的情况。实际的内存占用会比这大,因为随着业务的进行,会进行 Cache 的累积,最后导致整体的使用内存增大。

下面分别调整 MySQL 和 Apache 的配置文件。

MySQL

修改 /etc/my.cnf 文件,增加如下配置内容:

performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256

内容使用情况如下:

linux下mysql内存使用情况
linux 下 mysql 内存使用情况

如图所示,在修改 MySQL 配置项后内存使用已经大幅度下降到 71m 了。所以,默认的 MySQL 配置真是不适合我们这种小型网站。同时,你会注意到运行了一段时间后,Apache 内存占比上升,使用量达到406m。真是可怕。

下面我们修改 Apache 的配置文件,httpd.conf:

# event MPM
# StartServers: initial number of server processes to start
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestWorkers: maximum number of worker threads
# MaxConnectionsPerChild: maximum number of connections a server process serves
# before terminating
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 5
MaxSpareThreads 50
ThreadsPerChild 10
MaxRequestWorkers 50
MaxConnectionsPerChild 50
</IfModule>

由于我的 Apache 加载的是 event 模式,所以我这里修改了相应的 event 模块配置。如果你想知道你自己加载的是哪种模式,每一个配置项是什么意思,那么你可以参阅下这篇文章:apache2.4.x 三种 MPM 介绍

修改后配置重启就 OK 了。

总结

没有总结


文章来源:小型网站架构降 Apache 与 MySQL 内存占用比率

转载请注明出处,违者必究!

Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.