Debian 服务器内存占用过高排查:htop 使用与 PHP-FPM 优化指南
前言
最近在排查 Debian 服务器内存占用过高的问题时,发现了一些有用的技巧。本文将分享如何使用 htop 进行系统监控,以及如何优化 PHP-FPM 配置来降低内存占用。
一、查看内存占用的常用命令
1. free 命令
最简单直接的方式:
free -h # 人类可读格式(GB/MB)
free -m # 以 MB 显示
2. htop - 交互式进程查看器
htop 是 top 的增强版,提供彩色界面和更直观的操作。
# 安装
sudo apt install htop
# 启动
htop
二、htop 详细使用指南
界面说明
htop 界面分为几个区域:
- 顶部:CPU 使用率条(每个核心一行)、内存和 Swap 使用条
- 中部:进程列表,显示 PID、用户、CPU%、内存%、运行时间、命令等
- 底部:快捷键提示
常用快捷键
| 按键 | 功能 |
|---|---|
| F1 / h | 帮助 |
| F2 / S | 设置 |
| F3 / / | 搜索进程 |
| F4 / \ | 过滤进程 |
| F5 / t | 树形视图 |
| F6 | 排序 |
| F9 / k | 杀死进程 |
| F10 / q | 退出 |
| M | 按内存排序 |
| P | 按 CPU 排序 |
| H | 隐藏/显示线程(重要!) |
| u | 按用户过滤 |
重要技巧:隐藏线程
默认情况下,htop 会显示所有线程,这会让你误以为某个程序(如 MySQL)有几十个进程。实际上这些只是同一个进程的多个线程。
按 H 键隐藏线程后,就能看到真实的进程数量。
验证方法:
# 查看实际进程数
ps aux | grep mysql | wc -l
三、问题发现:PHP-FPM 进程过多
在隐藏线程后,发现内存占用的真正元凶:20+ 个 php-fpm 进程,每个占用 50-90M 内存,总计约 1.5G!
对于一台只有 3.7G 内存的服务器来说,这显然太多了。
PHP-FPM 工作原理
PHP-FPM 使用进程池(pool)模式:
- 预先创建多个 PHP 进程等待请求
- 每个请求由一个进程处理
- 处理完后进程回到池中等待下一个请求
进程管理模式
| 模式 | 说明 |
|---|---|
| pm = static | 固定数量进程,始终保持 |
| pm = dynamic | 动态调整,在 min 和 max 之间 |
| pm = ondemand | 按需创建,空闲时销毁 |
四、PHP-FPM 优化方案
查看当前配置
cat /www/server/php/*/etc/php-fpm.d/www.conf | grep "^pm"
推荐配置(4G 以下内存服务器)
编辑配置文件:
vi /www/server/php/74/etc/php-fpm.d/www.conf
修改为:
pm = dynamic
pm.max_children = 10 # 最大进程数
pm.start_servers = 3 # 启动时创建的进程数
pm.min_spare_servers = 2 # 最小空闲进程数
pm.max_spare_servers = 5 # 最大空闲进程数
pm.max_requests = 500 # 每个进程处理多少请求后重启
重启 PHP-FPM
# 方式一
/etc/init.d/php-fpm-74 restart
# 方式二
systemctl restart php-fpm
五、额外建议:添加 Swap 分区
对于小内存服务器,建议添加 Swap 作为缓冲,防止内存不足时系统崩溃:
# 创建 2G 交换文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
六、优化效果
| 项目 | 优化前 | 优化后 |
|---|---|---|
| PHP-FPM 进程数 | 20+ | 3-10 |
| PHP 内存占用 | ~1.5G | ~500M |
| 总内存使用率 | 86% | ~60% |
总结
- htop 按 H 隐藏线程,才能看到真实的进程数量
- PHP-FPM 进程数要根据服务器内存合理配置
- 小内存服务器建议 pm.max_children 设为 10 以下
- 添加 Swap 作为内存不足时的缓冲
版权声明:
作者:东明兄
链接:https://blog.crazyming.com/note/3280/
来源:CrazyMing
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论