温馨提示×

Linux下如何监控LNMP性能

小樊
34
2025-12-20 00:26:08
栏目: 智能运维

Linux下LNMP性能监控实操指南

一 监控体系与分层

  • 系统层:CPU、内存、磁盘IO、网络、负载等,使用top/htop、vmstat、iostat、free、df、ss等工具快速定位瓶颈。
  • 服务层:
    • Nginx:启用ngx_http_stub_status_module获取连接与请求指标;结合访问/错误日志分析吞吐与错误。
    • MySQL:使用mysqladmin status、SHOW STATUS/PROCESSLIST、慢查询日志定位慢SQL与连接压力。
    • PHP-FPM:通过pm.status_path暴露进程池状态,监控排队、慢请求与进程利用率。
  • 应用与日志层:定期分析Nginx、MySQL、PHP-FPM日志,配合Xdebug/Blackfire做代码级剖析。
  • 可视化与告警层:使用Prometheus + GrafanaZabbix集中采集、可视化与告警。

二 快速上手命令清单

  • 系统资源与连接
    • 实时资源:top/htop;整体资源:vmstat 1iostat -x 1free -mdf -h
    • 连接与端口:ss -tulpen | headss -s;网络与接口统计可用netstat(ss更快更现代)。
  • Nginx
    • 运行状态:sudo systemctl status nginx;配置校验:nginx -t;优雅重载:nginx -s reload
    • 指标与日志:启用stub_status查看Active/Reading/Writing/Waiting与每秒请求;分析access.log/error.log
  • MySQL
    • 服务与状态:sudo systemctl status mysql;命令行:mysqladmin statusmysqladmin --relative --sleep 5 extended-status;慢查询:SHOW VARIABLES LIKE ‘slow_query_log%’; SHOW VARIABLES LIKE ‘long_query_time’; 并分析慢日志。
  • PHP-FPM
    • 服务与池状态:sudo systemctl status php-fpm;配置pm.status_path(如**/status**),用curl http://127.0.0.1/status?json查看active processes、idle processes、queue等。

三 关键指标与阈值建议

层级 关键指标 常用命令/来源 告警阈值建议
系统 CPU使用率、负载(1/5/15)、iowait top/vmstat 1、iostat -x 1 负载持续>CPU核数;iowait>20%
系统 内存使用率、Swap使用 free -m 可用内存低且Swap增长
系统 磁盘空间、Inode df -h、df -i 可用空间<**20%**或Inode<10%
系统 TCP连接数/状态 ss -s、ss -tulpen TIME_WAIT>1万或连接数接近ulimit -n
Nginx Active/Waiting、每秒请求、5xx比例 stub_status、access.log 5xx>**1%**或Waiting持续很高
MySQL Threads_connected、Threads_running、Slow_queries SHOW STATUS、慢查询日志 Threads_running>CPU核数;慢查询突增
PHP-FPM active/idle、queue、slow requests pm.status_path queue>0持续;慢请求增多

四 可视化与告警落地

  • Prometheus + Grafana
    • 采集:部署node_exporter(系统)、nginx-exporter(Nginx stub_status)、mysqld_exporter(MySQL)、php-fpm-exporter(status)。
    • 可视化:导入Nginx/MySQL/PHP-FPM官方或社区仪表盘,构建总览→组件→实例三级视图。
    • 告警:用Alertmanager配置规则(如5xx、慢查询、连接堆积、磁盘告警),对接邮件/企业微信/钉钉/Slack
  • Zabbix
    • 主机上创建Nginx/MySQL/PHP-FPM监控项与触发器(基于状态页、命令输出、日志关键字)。
    • 使用模板自动发现批量纳管实例,配置动作发送告警。

五 实战排障流程

  • 压测与观测并行:用wrk模拟并发,观察延迟与吞吐变化。示例:wrk -t12 -c100 -d30s --latency http://your-domain/;压测时实时查看ss -s、top/htop、iostat -x 1,定位连接、CPU、IO瓶颈。
  • Nginx排障:打开stub_status,关注Active/Waiting每秒请求;若Waiting高且吞吐上不去,多为后端PHP-FPM或数据库处理慢。
  • MySQL排障:用mysqladmin statusSHOW PROCESSLIST查看活跃线程与锁等待;开启并分析慢查询日志,用pt-query-digest找出TOP慢SQL并建索引/改写。
  • PHP-FPM排障:打开pm.status_path,关注queueslow requests;若queue>0持续,考虑增加pm.max_children/pm.start_servers或优化代码与SQL。
  • 日志与代码级:定期分析Nginx/PHP-FPM错误日志;用Xdebug/Blackfire定位热点函数与慢调用。

0