[{"data":1,"prerenderedAt":59},["ShallowReactive",2],{"article-125":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":13,"status":16,"is_open":16,"is_deleted":14,"is_top":16,"is_recommend":16,"create_time":17,"update_time":18,"image_id":19,"url":13,"member_id":14,"cate_name":20,"prev":21,"next":24,"tags":27,"words":30,"read_time":31,"comments":14,"cover":32,"relevant":33},125,"Linux环境下PHP内存占用查询与监控指南","linux,内存,php","在服务器运维和PHP应用开发中，监控PHP进程的内存使用情况是保障系统稳定性和性能优化的重要环节。本文将详细介绍在Linux环境下如何查询和监控PHP进程的内存占用情况，帮助开发者和运维人员更好地管理系统资源。",4,"在服务器运维和PHP应用开发中，监控PHP进程的内存使用情况是保障系统稳定性和性能优化的重要环节。本文将详细介绍在Linux环境下如何查询和监控PHP进程的内存占用情况，帮助开发者和运维人员更好地管理系统资源。\n\n## 一、查看PHP进程内存使用情况\n\n### 使用`ps`命令实时查看\n\n`ps`命令是Linux系统中最常用的进程查看工具之一，可以快速获取PHP进程的内存使用信息：\n\n```bash\n# 查看所有PHP进程并按内存使用率排序\nps aux | grep php | grep -v grep | sort -k4 -rn\n\n# 专门查看PHP-FPM进程的内存使用情况\nps aux | grep php-fpm | grep -v grep\n\n# 查看更详细的进程信息（包含PID、命令、内存百分比、CPU占用等）\nps -eo pid,comm,%mem,%cpu,rss,vsz,args | grep php\n```\n\n**关键参数说明**：\n- **RSS（Resident Set Size）**：进程实际占用的物理内存大小（单位：KB）\n- **VSZ（Virtual Set Size）**：进程占用的虚拟内存大小\n- **%MEM**：进程占用内存的百分比\n\n## 二、PHP-FPM进程池状态查询\n\nPHP-FPM作为PHP的FastCGI管理器，提供了专门的状态页面来监控其运行情况：\n\n```bash\n# 查看PHP-FPM服务状态（系统服务方式）\nsudo systemctl status php-fpm\n# 或使用service命令\nsudo service php-fpm status\n\n# 通过配置的status页面查询（需要先在php-fpm.conf中启用）\ncurl http:\u002F\u002Flocalhost\u002Fstatus\n# 或\ncurl http:\u002F\u002Flocalhost\u002Ffpm-status\n```\n\n启用PHP-FPM status页面需要修改php-fpm配置文件，添加以下内容：\n```ini\npm.status_path = \u002Fstatus\n```\n\n## 三、使用交互式监控工具\n\n### `top`和`htop`命令\n\n这两个命令提供了交互式的进程监控界面，非常适合实时观察PHP进程的内存变化：\n\n```bash\n# 启动top并按内存使用率排序\ntop -c -o %MEM\n# 在top界面中，按\"M\"键也可以快速切换到按内存排序\n\n# 筛选显示PHP进程\ntop -c | grep -i php\n\n# 使用htop（功能更强大，需先安装）\nhtop\n# 在htop中按F4键，输入\"php\"可筛选PHP进程\n```\n\n## 四、统计PHP进程总内存占用\n\n有时候我们需要了解系统中所有PHP进程的总内存消耗，可以使用以下命令：\n\n```bash\n# 统计所有PHP进程的总物理内存使用（MB）\nps aux | grep php | grep -v grep | awk '{sum+=$6} END {print sum\u002F1024 \" MB\"}'\n\n# 更详细的统计信息（进程数、物理内存、虚拟内存）\nps aux | grep php | grep -v grep | awk '\nBEGIN {total_rss=0; total_vsz=0; count=0}\n{total_rss+=$6; total_vsz+=$5; count++}\nEND {\n    print \"进程数量: \" count;\n    print \"物理内存总计: \" total_rss\u002F1024 \" MB\";\n    print \"虚拟内存总计: \" total_vsz\u002F1024 \" MB\";\n}'\n```\n\n## 五、查看进程内存映射详情\n\n使用`pmap`命令可以查看进程的详细内存映射情况，帮助分析内存使用的具体分布：\n\n```bash\n# 查看指定PHP进程的详细内存映射\npmap -x \u003Cphp_pid>\n\n# 仅查看内存使用摘要\npmap \u003Cphp_pid> | tail -1\n# 输出示例：total kB  123456（总内存使用，单位KB）\n```\n\n## 六、PHP脚本内部内存监控\n\n除了系统层面的监控，PHP还提供了内置函数来监控脚本运行时的内存使用：\n\n```php\n\u003C?php\n\u002F\u002F 获取当前脚本内存使用（单位：MB）\necho \"当前内存使用: \" . memory_get_usage() \u002F 1024 \u002F 1024 . \" MB\\n\";\n\n\u002F\u002F 获取脚本运行以来的峰值内存使用\necho \"峰值内存使用: \" . memory_get_peak_usage() \u002F 1024 \u002F 1024 . \" MB\\n\";\n\n\u002F\u002F 在代码关键位置测量内存消耗\n$start_memory = memory_get_usage();\n\u002F\u002F 执行一些操作...\n$end_memory = memory_get_usage();\necho \"操作消耗内存: \" . ($end_memory - $start_memory) \u002F 1024 . \" KB\\n\";\n?>\n```\n\n## 七、使用高级系统监控工具\n\n### `glances`、`nmon`和`smem`\n\n这些工具提供了更直观的系统资源监控界面：\n\n```bash\n# 使用glances（需要安装）\nglances\n\n# 使用nmon\nnmon\n\n# 使用smem按用户显示内存使用（假设PHP以www-data用户运行）\nsmem -u | grep www-data\n```\n\n## 八、检查PHP内存配置\n\n查看和调整PHP的内存限制配置也是优化内存使用的重要环节：\n\n```bash\n# 查看PHP-FPM配置文件中的内存限制\ngrep -r \"memory_limit\" \u002Fetc\u002Fphp\u002F*\u002Ffpm\u002F\n\n# 查看PHP CLI的内存设置\nphp -i | grep memory_limit\n\n# 查看运行中PHP进程的环境变量\ncat \u002Fproc\u002F$(pgrep php-fpm | head -1)\u002Fenviron | tr '\\0' '\\n' | grep memory_limit\n```\n\n## 九、实用工具：PHP内存使用实时监控脚本\n\n为了方便持续监控PHP内存使用情况，我们可以创建一个简单的bash脚本：\n\n```bash\n#!\u002Fbin\u002Fbash\n# monitor_php_memory.sh - PHP内存使用实时监控脚本\n\nwhile true; do\n    clear\n    echo \"===== PHP内存使用监控 =====\"\n    echo \"时间: $(date)\"\n    echo \"\"\n    \n    # 统计进程和内存使用情况\n    ps aux | grep php | grep -v grep | grep -v \"monitor_php\" | awk '\nBEGIN {\n        total_rss=0;\n        printf(\"%-10s %-10s %-10s %-10s %s\\n\", \n               \"PID\", \"%MEM\", \"RSS(MB)\", \"VSZ(MB)\", \"COMMAND\");\n        printf(\"%-10s %-10s %-10s %-10s %s\\n\", \n               \"---\", \"----\", \"-------\", \"-------\", \"-------\");\n    }\n    {\n        rss_mb=$6\u002F1024;\n        vsz_mb=$5\u002F1024;\n        total_rss+=$6;\n        printf(\"%-10s %-10s %-10.1f %-10.1f %s\\n\", \n               $2, $4, rss_mb, vsz_mb, $11);\n    }\n    END {\n        printf(\"\\n总计: %.1f MB (物理内存)\\n\", total_rss\u002F1024);\n    }'\n    \n    echo \"\"\n    echo \"按 Ctrl+C 退出监控\"\n    sleep 5\n\ndone\n```\n\n使用方法：\n```bash\n# 保存为monitor_php_memory.sh并赋予执行权限\nchmod +x monitor_php_memory.sh\n\n# 运行监控脚本\n.\u002Fmonitor_php_memory.sh\n```\n\n## 十、常见问题排查技巧\n\n### 内存泄漏检测\n\n如果怀疑PHP应用存在内存泄漏，可以使用以下方法监控内存增长趋势：\n\n```bash\n# 每1秒检查一次PHP进程总内存使用\nwatch -n 1 'ps aux | grep php | grep -v grep | awk \"{sum+=$6} END {print sum\u002F1024 \\\"MB\\\"}\"'\n```\n\n### 开发环境内存调试\n\n在开发环境中，可以使用`valgrind`工具检测PHP脚本的内存泄漏：\n\n```bash\n# 使用valgrind检测内存泄漏（开发环境）\nvalgrind --leak-check=yes php your_script.php\n```\n\n## 总结\n\n本文介绍了多种在Linux环境下查询和监控PHP内存使用的方法，从简单的命令行工具到自定义监控脚本，涵盖了不同场景下的需求：\n\n- **快速查看**：使用`ps`命令获取PHP进程内存使用概览\n- **详细分析**：使用`top`、`htop`或`pmap`进行深入分析\n- **脚本监控**：通过PHP内置函数或自定义bash脚本进行持续监控\n- **配置检查**：查看和调整PHP内存限制配置\n\n合理运用这些工具和方法，可以帮助开发者和运维人员及时发现内存使用异常，优化PHP应用性能，保障服务器稳定运行。",null,0,35,1,"2025-12-01 16:52:54","2025-12-01 16:52:55",97,"Linux",{"id":22,"title":23},124,"PHP8新特性：match 表达式详解",{"id":25,"title":26},126,"Nuxt 3 + Naive UI 中优雅集成 SVG 图标方案",[28],{"id":29,"name":20},39,2719,6,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002Ff9\u002F6588c462e86e0caa3f541b2f8ccc4c.jpeg",[34,39,44,49,54],{"id":35,"title":36,"create_time":37,"description":38},53,"Linux环境下Apahce的调优","2019-05-21 14:04:03","整理了部分有关Apahce调优的配置说明，后续陆续的将所有调优方式更新。",{"id":40,"title":41,"create_time":42,"description":43},50,"虚拟机安装Centos7后配置网络","2019-03-26 20:37:33","VMware虚拟机上安装min版的Centos7，并配置网络。虚拟机和centos7的安装在本文不做相关的介绍。",{"id":45,"title":46,"create_time":47,"description":48},85,"Linux环境PHP解压缩ZipArchive中的extractTo()方法，解压zip时文件丢失的问题","2020-04-30 17:17:44","在实际项目中要用ZipArchive解压ZIP文件，起初測试环境在Win环境中，測试通过，换到 LINUX 的环境中时  就出问题了（ZIP包中有文件和目录，包含带汉字的文件名称）\r\n\r\n问题的现象是：不带汉字的文件解压没有问题，另外有部分带汉字和数字字母的文件解压没有问题，然后其它纯文字的文件名称就丢失了，也没有报错，最后把问题定位到了extractTo()方法，这种方法是个封装的方法，看不到实际的源码。 \r\n\r\n经Google一番后，发现使用` getNameIndex `和` numFiles `",{"id":50,"title":51,"create_time":52,"description":53},78,"Centos7安装Docker","2019-12-28 14:17:23","### 安装docker\n\n安装命令\n\n``` bash\nyum install docker\n```\n\n启动docker并设置为开机启动\n\n``` bash\nservice docker start\nchkconfig docker on\n```\n\nLCTT 译注：此处采用了旧式的 sysv 语法，如采用CentOS 7中支持的新式 systemd 语法，如下：\n\n``` bash\nsystemcty start docker.service\nsystemcty enable docker.s",{"id":55,"title":56,"create_time":57,"description":58},21,"Cenos7.2下安装Apache2.4，MySQL5.7和PHP7.1","2019-01-17 22:48:15","一、主要软件：1、SecureCRT 5.1：是一款支持SSH（SSH1和SSH2）的终端仿真程序，简单地说是Windows下登录UNIX或Linux服务器主机的软件。2、WinSCP：是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。winscp也可以链接其他系统,比如linux系统。以上两款软件的具体使用可以通过搜索引擎分分钟查到。",1783431650859]