大内存 Magento PHP 服务器内存优化 (一)

更新日期: 2024-11-06 阅读次数: 178 字数: 597 分类: magento

之前通过 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 聊聊, 查看更多联系方式