温馨提示×

Debian Nginx服务器性能测试方法

小樊
37
2025-12-27 16:31:42
栏目: 云计算

Debian Nginx 服务器性能测试方法

一 测试准备与基线

  • 部署稳定的 LNMP 环境:安装并启动 Nginx、MariaDB/MySQL、PHP-FPM,确保站点可正常访问;Nginx 默认站点配置中,PHP 解析通常使用 Unix Socket(如:/var/run/php/php7.x-fpm.sock)。为后续压测准备一个接近真实业务的测试端点(如 /info.php 或静态大文件)。
  • 安装常用压测与系统工具:
    • HTTP 压测:ab、wrk
    • 系统资源:sysbench、fio、netperf
      示例:sudo apt install -y apache2-utils wrk sysbench fio netperf
  • 建立监控基线:
    • 启用 Nginx stub_status 获取连接与请求吞吐;
    • 实时资源监控用 top/htop、vmstat、iostat、ss
    • 日志分析关注 $request_time、$upstream_response_time
      以上准备可确保压测覆盖 HTTP 层与系统层,并能快速定位瓶颈。

二 HTTP 层基准测试

  • 静态资源测试(推荐先用纯静态文件建立上限):
    • ab:ab -n 10000 -c 200 http://your_server_ip/static/big.jpg
    • wrk:wrk -t12 -c400 -d30s http://your_server_ip/static/big.jpg
  • 动态 PHP 测试(更接近真实业务):
    • ab:ab -n 5000 -c 100 http://your_server_ip/info.php
    • wrk:wrk -t12 -c400 -d30s http://your_server_ip/info.php
  • 关键指标解读:
    • Requests per second(QPS)Time per request(平均响应时间)Transfer rate
    • wrk 的 Latency(延迟分布)Requests/sec
    • 关注 Failed requests/非2xx比例 与错误日志。
  • 建议流程:从低并发逐步爬坡(如 c=50→200→400),每个阶梯保持 30–60 秒,观察指标拐点与错误率变化。

三 系统资源与网络专项测试

  • CPU:sysbench cpu --threads=4 --events=10000 --time=60 run
  • 内存:sysbench memory --threads=4 --time=60 run
  • 磁盘 I/O(随机读,4KB,4 并发,持续 60 秒):
    fio --name=randread --ioengine=libaio --rw=randread --bs=4k --size=1G --numjobs=4 --runtime=60 --time_based --filename=/tmp/fio.log
  • 网络带宽(TCP_STREAM):netperf -H your_server_ip -t TCP_STREAM
    这些测试帮助判断瓶颈是在 CPU、内存、磁盘 I/O 还是 网络链路,避免把应用层问题误判为 Nginx 配置问题。

四 监控与结果分析

  • Nginx 实时指标:启用 stub_status,访问 /nginx_status 查看 Active connections、accepts/handled/requests、Reading/Writing/Waiting;配合 access.log$request_time、$upstream_response_time 做慢请求排查(如 awk ‘$11>1 {print}’ 过滤超过 1 秒 的请求)。
  • 系统监控:
    • top/htop(进程资源)、vmstat(内存与 CPU)、iostat(磁盘吞吐与延迟)、ss(连接状态);
    • 压测时观察 CPU 利用率、load、iowait、上下文切换、TCP 连接队列 是否异常。
  • 可视化与告警(可选):部署 Prometheus + Grafana + nginx-prometheus-exporter(默认 :9113),导入 Nginx 官方仪表板(ID:12708);配置 Alertmanager 规则,如:
    • 5xx 错误率 5 分钟窗口超过 5%
      expr: rate(nginx_http_requests_total{status=~“5…”}[5m]) / rate(nginx_http_requests_total[5m]) > 0.05
    • 活跃连接数超过阈值(如 1000):
      expr: nginx_connections_active > 1000
      通过监控与告警,可以把压测结果与线上观测闭环,快速发现回归与异常。

五 常见瓶颈与优化方向

  • Nginx:
    • worker_processes 设为 auto(CPU 核心数);
    • worker_connections 适度增大(结合 ulimit -n);
    • 开启 gzip、长连接复用(keepalive);
    • 静态资源使用 sendfile on;关闭不必要的 server_tokens
  • PHP-FPM:
    • 合理设置 pm.max_children(依据单进程内存×可用内存);
    • 启用 opcache(如:opcache.enable=1、opcache.memory_consumption=256、opcache.max_accelerated_files=10000;PHP 8.x 可开启 opcache.jit 提升性能)。
  • 系统与网络:
    • 提升文件描述符限制(如 ulimit -n 65535);
    • 优化内核网络参数(如 net.core.somaxconn、net.ipv4.ip_local_port_range、net.ipv4.tcp_fin_timeout、net.core.netdev_max_backlog 等)。
  • 数据库:
    • 调整 innodb_buffer_pool_size(常见为内存的 50%–80%);
    • 结合慢查询日志与 pt-query-digest 优化 SQL。
      优化应基于压测与监控数据逐步验证,避免一次性大幅改动导致新的不稳定。

0