温馨提示×

Debian LAMP怎样进行性能监控

小樊
34
2025-11-15 03:43:37
栏目: 智能运维

Debian LAMP性能监控实操指南

一 快速排障的命令行工具

  • 进程与负载:top/htop(安装:sudo apt install htop),查看占用最高的进程与整体负载。
  • 内存与交换:free -h,快速判断是否存在内存压力或频繁换页。
  • 虚拟内存与I/O:vmstat 1 5,观察si/so(换入/换出)与wa(I/O等待)。
  • 磁盘I/O:iostat -xz 1(需安装:sudo apt install sysstat),关注await、r/s、w/s、util%
  • 文件系统:df -h,确认是否因磁盘空间不足导致异常。
  • 网络与连接:ss -tulnp(或 netstat),排查TIME_WAIT/CLOSE_WAIT堆积与端口占用。
  • 系统日志:journalctl -xe,集中查看内核与服务的错误与告警。
    以上命令适合在终端快速定位瓶颈与异常,建议配合 watch 或脚本做周期性巡检。

二 组件级监控要点

  • Apache
    • 启用状态页:在站点或全局配置中加入
      <Location /server-status>
          SetHandler server-status
          Require local
          # 如需内网访问可改为:Require ip 192.168.1.0/24
      </Location>
      
      访问 http://服务器IP/server-status?auto 获取总请求数、空闲/忙碌工作进程、每秒请求、字节吞吐等;结合 ExtendedStatus On 可获取更细指标。
    • 日志分析:实时查看错误与慢请求
      tail -f /var/log/apache2/error.log
      # 若启用 mod_log_config 的 combined 格式,可用 goaccess 等工具做趋势分析
      
  • MariaDB/MySQL
    • 实时状态:登录数据库执行
      SHOW GLOBAL STATUS LIKE 'Threads_connected';
      SHOW GLOBAL STATUS LIKE 'Queries';
      SHOW GLOBAL STATUS LIKE 'Slow_queries';
      SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
      SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';
      -- 计算缓存命中率:1 - (Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)
      
    • 慢查询:在 my.cnf 中启用
      slow_query_log = 1
      slow_query_log_file = /var/log/mysql/mysql-slow.log
      long_query_time = 1
      log_queries_not_using_indexes = 1
      
  • PHP
    • 运行配置与瓶颈定位:phpinfo.php(仅内网访问)查看loaded configuration file、opcache等;
    • FPM 监控:查看 /var/log/php7.x-fpm.log(按实际版本),关注慢日志与进程异常;
    • 生产建议开启 opcache 并适度调整 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers,避免进程争用与排队。
      以上要点可帮助定位 Web、数据库与 PHP 运行期的性能瓶颈与错误来源。

三 可视化与长期监控方案

  • Prometheus + Grafana
    • 采集:部署 node_exporter(主机指标)、mysqld_exporter(MariaDB/MySQL)、apache_exporter(Apache);
    • 存储与展示:Prometheus 拉取指标,Grafana 配置面板展示CPU、内存、磁盘 I/O、网络、连接数、查询速率、缓存命中率、慢查询等;
    • 告警:在 Prometheus 配置 Alertmanager 规则(如磁盘使用率、服务宕机、查询延迟异常)。
  • Zabbix
    • 适合传统运维体系:安装 Zabbix Server/Proxy/Agent,通过模板监控 Linux、Apache、MariaDB 等;
    • 提供图形化界面、阈值告警、自动发现可视化仪表盘
  • 轻量与开箱即用
    • Nagios:基于插件的主机与服务监控与告警;
    • Observium:自动发现网络设备与服务器,适合中小规模环境。
      上述方案可按规模与团队习惯选择,建议至少保留7–30天的指标留存用于回溯分析。

四 关键指标与告警阈值建议

维度 关键指标 建议阈值或关注点 排查方向
CPU load average、%usr、%sys、%iowait load ≈ CPU核数为健康;**%iowait 持续>20%**多为I/O瓶颈 查 iostat、进程I/O、磁盘与数据库
内存 available、swap used、si/so swap 持续增长si/so 非零且持续需警惕 查内存泄漏、缓存/缓冲命中、服务配置
磁盘 %util、await、r/s、w/s **%util 持续>80%**易成为瓶颈;await升高表示响应慢 查 I/O 密集进程、RAID/磁盘健康、SQL优化
网络 带宽占用、丢包/重传 带宽接近上限或重传率高影响响应 查连接数、长连接、协议与对端状态
Apache Busy/Idle workers、Req/s、Bytes/s Busy 长期接近 MaxRequestWorkers需扩容或优化 调优 MPM、启用压缩/缓存、优化代码与SQL
MariaDB Threads_connected、Queries/s、Slow_queries、Innodb_buffer_pool_reads/requests 慢查询增长、**缓存命中率<95%**需优化 慢查询日志、索引与SQL、缓冲池与配置
PHP-FPM 进程数、请求排队、慢请求 排队>0慢请求增多需优化代码/配置 调整 pm 参数、开启 opcache、定位慢脚本
以上阈值用于快速判断健康度,需结合业务峰值与历史基线动态校准。

五 一键巡检脚本示例

  • 用途:每5分钟采集一次关键指标并追加到日志,便于回溯与告警基线建立。
  • 使用方法:保存为 monitor.sh,赋权并加入 crontab -e:*/5 * * * * /usr/local/bin/monitor.sh
#!/usr/bin/env bash
TS=$(date '+%F %T')
LOG=/var/log/lamp_monitor.log

{
  echo "[$TS] === System ==="
  echo "Load: $(awk '{print $1,$2,$3}' /proc/loadavg)"
  free -m | awk 'NR==2{printf "Mem: used %sMB free %sMB cache %sMB\n", $3,$4,$6}'
  df -h | awk '$NF=="/"{printf "RootFS: %s used %s avail %s %s\n", $1,$5,$4,$6}'

  echo "[$TS] === I/O ==="
  iostat -xz 1 2 | awk 'NR>3 && $1!~/^$/ {printf "Disk: %s util=%s await=%s r/s=%s w/s=%s\n", $1,$14,$10,$4,$5; exit}'

  echo "[$TS] === Network ==="
  ss -s | head -n 5

  echo "[$TS] === Apache ==="
  if command -v curl >/dev/null 2>&1; then
    curl -s "http://127.0.0.1/server-status?auto" 2>/dev/null | head -n 20
  fi

  echo "[$TS] === MariaDB ==="
  if command -v mysql >/dev/null 2>&1; then
    mysql -e "SHOW GLOBAL STATUS LIKE 'Threads_connected'; SHOW GLOBAL STATUS LIKE 'Slow_queries';" 2>/dev/null
  fi
} >> "$LOG" 2>&1

该脚本依赖 iostat(sysstat)、sscurlmysql 客户端,请确保已安装;生产环境建议配合 logrotate 做日志轮转与保留策略。

0