Debian 服务器内存占用过高排查:htop 使用与 PHP-FPM 优化指南

chat

前言

最近在排查 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%

总结

  1. htop 按 H 隐藏线程,才能看到真实的进程数量
  2. PHP-FPM 进程数要根据服务器内存合理配置
  3. 小内存服务器建议 pm.max_children 设为 10 以下
  4. 添加 Swap 作为内存不足时的缓冲

 

版权声明:
作者:东明兄
链接:https://blog.crazyming.com/note/3280/
来源:CrazyMing
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
Debian 服务器内存占用过高排查:htop 使用与 PHP-FPM 优化指南
本文分享 Debian 服务器内存排查实战经验,重点介绍 htop 的使用技巧(特别是隐藏线程功能)以及 PHP-FPM 进程池优化配置,帮助小内存服务器降低内存占用。
<<上一篇
下一篇>>
chat