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

文章目录

    之前通过 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式