Ubuntu LNMP如何监控服务器性能
导读:Ubuntu LNMP 性能监控实操指南 一 快速巡检命令 组件状态与端口 查看服务状态:sudo systemctl status nginx、sudo systemctl status mysql、sudo systemctl st...
Ubuntu LNMP 性能监控实操指南
一 快速巡检命令
- 组件状态与端口
- 查看服务状态:sudo systemctl status nginx、sudo systemctl status mysql、sudo systemctl status php-fpm
- 实时资源:top/htop(安装:sudo apt-get install htop)
- 内存与 I/O:free -h、vmstat 1、iostat -x 1(安装:sudo apt-get install sysstat)
- 端口与连接:ss -tulpen | egrep ‘:(80|443|3306|9000)’
- Nginx
- 启用状态页:在 server 块中加入
访问 http://服务器IP/nginx_status 查看 Active connections、Reading、Writing、Waiting 等指标。location /nginx_status { stub_status on; allow 127.0.0.1; deny all; }
- 启用状态页:在 server 块中加入
- MySQL/MariaDB
- 运行状态:mysqladmin -u root -p status
- 慢查询分析:mysqldumpslow /var/log/mysql/slow.log
- PHP-FPM
- 进程与慢日志:检查 /var/log/php-fpm/error.log 与 www.conf 中的 slowlog、request_slowlog_timeout 配置
- 日志定位
- Nginx:/var/log/nginx/error.log
- MySQL:/var/log/mysql/error.log
- PHP-FPM:/var/log/php-fpm/error.log
二 可视化与长期监控
- Prometheus + Grafana
- 节点与数据库导出器:部署 node_exporter(9100)、mysqld_exporter(9104),Nginx 可用 nginx-prometheus-exporter(9113) 或 stub_status 配合 nginx-vts-exporter。
- Prometheus 配置示例:
scrape_configs: - job_name: 'node' static_configs: [{ targets: ['localhost:9100'] } ] - job_name: 'nginx' static_configs: [{ targets: ['服务器IP:9113'] } ] - job_name: 'mysql' static_configs: [{ targets: ['服务器IP:9104'] } ] - Grafana:安装后添加 Prometheus 数据源,导入 Node Exporter Full、MySQL Overview 等面板,实现历史趋势与告警可视化。
- Zabbix
- 安装 zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf,创建数据库与用户,配置 /etc/zabbix/zabbix_server.conf 的数据库连接并启动服务,适合企业级监控与告警。
三 关键指标与告警阈值建议
| 维度 | 关键指标 | 建议阈值或动作 |
|---|---|---|
| CPU | load average、CPU 使用率 | 持续高于 CPU 核心数 或 > 80% 持续 5 分钟,优先排查慢查询/阻塞进程 |
| 内存 | 可用内存、swap 使用 | 可用 < 10% 或 swap 持续 > 0,优化应用内存或扩容 |
| 磁盘 | IOPS、await、util | await 高、util 接近 100%,检查磁盘健康与 SQL/日志写入 |
| 网络 | 带宽占用、丢包/重传 | 带宽接近网卡上限或 重传率高,优化内容分发/压缩与链路质量 |
| Nginx | Active/Waiting、5xx 比例 | 5xx > 1% 或 Waiting 持续偏高,检查后端健康与超时配置 |
| MySQL | Threads_connected、Slow_queries、QPS/TPS | Threads_connected 接近上限或 慢查询突增,优化索引/SQL 与连接池 |
| PHP-FPM | 进程占用、慢请求 | 慢请求增多 或 进程打满,调整 pm.max_children/request_terminate_timeout 与慢日志 |
四 日志与慢查询优化
- Nginx
- 打开 access_log,按需记录 $request_time、$upstream_response_time,定位耗时阶段;结合 error.log 与 status 页面排查 499/502/504。
- MySQL
- 开启慢查询日志(如未开启):在 my.cnf 中设置 slow_query_log=1、slow_query_log_file=/var/log/mysql/slow.log、long_query_time=1,用 mysqldumpslow 或 pt-query-digest 分析并优化索引/SQL。
- PHP-FPM
- 开启 slowlog 与 request_slowlog_timeout=1,定位耗时函数与调用栈;结合 error.log 观察 Fatal/Parse error 与 max_execution_time 超限。
五 一键巡检脚本示例
#!/usr/bin/env bash
echo "=== 系统资源 ==="
free -h &
&
echo
vmstat 1 5 &
&
echo
iostat -x 1 5 &
&
echo
echo "=== 服务状态 ==="
systemctl is-active --quiet nginx &
&
echo "Nginx: active" || echo "Nginx: inactive"
systemctl is-active --quiet mysql &
&
echo "MySQL: active" || echo "MySQL: inactive"
systemctl is-active --quiet php-fpm &
&
echo "PHP-FPM: active" || echo "PHP-FPM: inactive"
echo "=== 端口监听 ==="
ss -tulpen | egrep ':(80|443|3306|9000)' &
&
echo
echo "=== Nginx 状态页 ==="
curl -s http://127.0.0.1/nginx_status 2>
/dev/null || echo "Nginx status disabled or not reachable"
echo "=== MySQL 状态 ==="
mysqladmin -u root -p status 2>
/dev/null || echo "MySQL status failed (check credentials/permissions)"
- 将脚本加入 crontab 每日巡检,并结合 Prometheus/Grafana 或 Zabbix 做长期趋势与阈值告警。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu LNMP如何监控服务器性能
本文地址: https://pptw.com/jishu/759567.html
