宝塔面板内存占用过高_优化内存清理脚本与调整PHP缓存

宝塔面板内存占用过高需四步优化:停用非必要插件、调大监控轮询间隔至30秒;按内存配比调整PHP-FPM的pm.max\_children等参数;清理OPcache缓存并调优相关配置;定时清理/dev/shm中session和日志文件。

宝塔面板内存占用过高_优化内存清理脚本与调整php缓存

宝塔面板自身进程吃内存太多怎么办

宝塔面板的 bt 主进程、python 后台服务、以及频繁轮询的监控模块(如网站监控、安全扫描)会持续占用 200–500MB 内存,尤其在低配机器(1GB 内存)上极易触发 OOM Kill。

这不是 bug,是设计使然:它用常驻 Python 进程维持 Web 界面响应和任务队列。但你不需要它每 3 秒扫一次日志。

  • 进 SSH 执行 top -c,按 M 降序看内存,重点关注 /usr/bin/pythonbt 相关进程
  • 停掉非必要插件:比如「防火墙」「网站监控」「消息推送」,这些在「软件商店 → 已安装」里一键禁用
  • 改轮询频率:编辑 /www/server/panel/data/interval.pl,把数字从 3 改成 30(单位秒),重启面板生效:bt restart
  • 别删 /www/server/panel/pyenv —— 面板启动会报错,真要精简,只清空 /www/server/panel/logs/ 下的旧日志

PHP-FPM 进程内存爆满的直接原因

PHP-FPM 的 pm.max_children 配置没随物理内存动态调整,是最常见的内存泄漏假象。一个 php-fpm 子进程平均占 30–60MB,设成 20 就可能吃掉 1.2GB。

别盲目调小——得先看真实负载。执行 ps aux | grep 'php-fpm:' | wc -l,再对比 free -h 剩余内存。

立即学习“PHP免费学习笔记(深入)”;

  • 查当前配置:grep 'pm.max_children\|pm.start_servers' /www/server/php/82/etc/php-fpm.d/www.conf(路径中的 82 换成你实际 PHP 版本)
  • 合理值参考:1GB 内存机器设 pm.max_children = 4;2GB 设 8;务必同步调低 pm.start_serverspm.min_spare_servers
  • 启用 pm = ondemand 更省内存,但首次请求延迟略高,适合流量不均的站点
  • 加一句 php_admin_value[memory_limit] = 128Mwww.conf,防单个脚本无限制吃内存

OPcache 缓存没清干净反而拖慢释放

OPcache 默认开启且缓存永不过期,PHP 文件改了不自动刷新,旧字节码堆在内存里,opcache_get_status() 显示 memory_usage.used_memory 持续上涨,但系统看不到这部分内存被释放。

下载

这不是泄露,是 OPcache 自己管的内存池没被正确回收。重启 PHP-FPM 是最干脆的解法,但你可以让它更可控。

  • 检查是否真启用了:php -i | grep opcache.enable,输出 on 才生效
  • 强制刷新缓存不用重启:访问 http://你的域名/oc.php(内容仅一行 <?php opcache_reset(); ?>),记得加 IP 白名单或临时放行
  • 关键参数调优:opcache.max_accelerated_files=4000(别设 100000)、opcache.revalidate_freq=60(每分钟检查文件修改)
  • 别开 opcache.save_comments=1,注释多的 Laravel/ThinkPHP 项目会多占 20% 内存

清理脚本不能只删 tmp,得盯住 /dev/shm

宝塔和 PHP 的 session、OPcache、Redis 临时文件默认走 /dev/shm(内存盘),这里不清理,df -h 看不到,但 free -h 里 cached 项会虚高,实际就是它占的。

写定时清理脚本时,漏掉这个路径等于白干。

  • 查占用:ls -lh /dev/shm/ | grep -E '(php|sess|opcache)'
  • 安全清理命令(加判断防误删):find /dev/shm -name "sess_*" -mmin +30 -delete 2>/dev/null
  • 宝塔日志压缩也在这儿:rm -f /dev/shm/*.log.*,但别删 /dev/shm/bt_*.sock,那是面板通信用的
  • 加到 crontab:每小时清一次,0 * * * * /bin/bash -c "find /dev/shm -name 'sess_*' -mmin +30 -delete 2>/dev/null"

内存优化不是调几个参数就完事。真正卡点在于:面板进程、PHP-FPM 子进程、OPcache 内存池、/dev/shm 临时区,这四块内存归属不同管理域,得分别下刀。少盯任何一块,过两天又回到 95% 占用。

已有 8188 条评论

    1. 张思雅 张思雅

      把宝塔监控插件停掉后,内存占用直接降了200M。这些插件确实方便,但对低配机器负担太大了。

    2. EllaJohnson EllaJohnson

      This article should be pinned in every Baota user forum. So many people struggle with memory issues and don't know where to start.

    3. 陈浩然 陈浩然

      opcache.max_accelerated_files设4000而不是100000,这个建议很实际。设太大反而管理开销增加。

    4. OliviaClark OliviaClark

      The top -c command with M sort is my go-to now for identifying memory hogs. Quickly spotted the python processes.

    5. 郑子涵 郑子涵

      php_admin_value[memory_limit]这个配置很有用,防止单个脚本跑飞了吃光所有内存。建议每个站点都设一下。