之前通过 linux 查看内存占用排名前十的进程 发现不少进程占用的内存过多。但是系统负载非常低。 严重增加了服务器的成本,于是想将这台 32G 的服务器,先降配到 16G,节省成本。
逐个处理,依次是 PHP, ES, Mariadb, Varnish.
通过查看日常访问量,及日常系统负载,发现负载及 CPU 利用率都非常低。先把 php 子进程数调低。
fpm 配置文件在哪里
$ find /usr/local/php -name php-fpm.conf
/usr/local/php/etc/php-fpm.conf
新服务器配置
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
旧服务器配置
pm = dynamic
pm.max_children = 50
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 45
es(elasticsearch)JVM 内存限制
可以设置 -Xms(初始堆大小)和 -Xmx(最大堆大小)来限制 ES 使用的内存。 一般建议将这两个值设置为相同大小,以避免 JVM 在运行过程中动态调整堆大小带来的性能开销。
通过 ps axuw | grep java 会看到 es 的启动参数中,设置了 Xms 和 Xmx 为 12G。 需要通过修改配置文件,将这个值调小:
sudo vim /etc/elasticsearch/jvm.options.d/jvm.options
修改后的值:
cat jvm.options.d/jvm.options
-Xms2g
-Xmx2g
而我在另一台新服务器上,设置为 1G 也能正常运行。谨慎期间,由 12G 调小为 2G。 待观察一周运行情况,再决定是否继续调小。
重启 ES,使配置生效:
sudo service elasticsearch restart
查看新的内存占用情况,显示内存占用前五的进程:
ps -eo pid,ppid,cmd,%mem,rsz --sort=-rsz | head -n 6
PID PPID CMD %MEM RSZ
141801 141776 /usr/sbin/varnishd -a :6081 15.3 5031352
8233 7954 /usr/local/mariadb/bin/mari 15.1 4989988
3533085 1 /usr/share/elasticsearch/jd 9.2 3045092
3531343 3531148 php-fpm: pool www 0.4 142120
3531154 3531148 php-fpm: pool www 0.3 127872
会看到 ES 的内存占用由之前的 13G,降低为了 3G。
限制 mariadb 的内存占用
mariadb 占用 5G 内存,也有点浪费,确认一下配置文件:
/etc/my.conf
innodb_buffer_pool_size = 22G
这里完全可以调整为 2G。
修改之后,重启生效:
sudo service mariadb restart
限制 Varnish 的内存占用
修改配置文件:
sudo vim /etc/systemd/system/varnish.service.d/customexec.conf
将参数 malloc 设置为 2G。
-s malloc,2GB
更新配置,并重启 varnish:
sudo systemctl daemon-reload
sudo service varnish restart
后续
系列之二,进一步降配: 大内存 Magento PHP 服务器内存优化 (二)
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式