温馨提示×

LNMP在Debian上的性能测试

小樊
45
2025-12-10 20:28:14
栏目: 智能运维

LNMP在Debian上的性能测试与调优

一、测试目标与准备

  • 明确目标:评估Nginx静态文件PHP动态页面MySQL数据库系统资源的吞吐、延迟与稳定性,形成可复现的基线。
  • 基线环境:更新系统并安装组件
    • sudo apt update && sudo apt install -y nginx mysql-server php-fpm php-mysql
    • 启动与开机自启:sudo systemctl enable --now nginx mysql php-fpm
  • 验证连通:创建测试页 /var/www/html/info.php
    • 访问:http://服务器IP/info.php 确认返回 PHP 信息页
  • 监控准备:安装基础监控工具
    • sudo apt install -y nmon htop sysstat
    • 实时观测:nmon(CPU/内存/磁盘/网络)、htop(进程)、iostat -x 1(磁盘)、ss -s(连接)

二、分层测试步骤与命令

  • 静态文件(Nginx)
    • 准备大文件:dd if=/dev/zero of=/var/www/html/big.bin bs=1M count=100
    • 测试:ab -n 10000 -c 200 http://服务器IP/big.bin
  • 动态页面(Nginx + PHP-FPM)
    • 测试:ab -n 2000 -c 100 http://服务器IP/info.php
    • 长时与并发:wrk -t12 -c400 -d30s http://服务器IP/info.php
  • 数据库(MySQL/MariaDB)
    • 准备库表:
      • mysql -u root -p -e “CREATE DATABASE sbtest;”
      • sysbench oltp_read_write --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=root --mysql-password=YOUR_PASS --mysql-db=sbtest --tables=10 --table-size=100000 prepare
    • 运行:sysbench oltp_read_write --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=root --mysql-password=YOUR_PASS --mysql-db=sbtest --tables=10 --table-size=100000 --threads=8 --time=60 --report-interval=10 run
    • 清理:sysbench oltp_read_write --db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=root --mysql-password=YOUR_PASS --mysql-db=sbtest cleanup
  • 系统资源与网络
    • CPU/内存:sysbench cpu --threads=4 --events=10000 --time=60 run;sysbench memory --threads=4 --time=60 run
    • 磁盘I/O:fio --name=randread --ioengine=libaio --rw=randread --bs=4k --size=1G --numjobs=4 --runtime=60 --time_based --filename=/tmp/fio.log
    • 网络带宽/延迟:netperf -H 目标IP -t TCP_STREAM;netperf -H 目标IP -t UDP_STREAM
  • 说明:上述工具与命令适用于 Debian 上的 LNMP 性能测试,包含 ab、wrk、sysbench、fio、netperf 等常用组合

三、关键指标与结果判读

  • 吞吐与并发
    • Requests per second(RPS):越高越好;随并发上升出现拐点时,说明瓶颈出现(应用/DB/网络/磁盘)。
    • Time per request(平均/90%/95%/99%):P95/P99 能反映长尾延迟,生产更关注。
  • 数据库
    • TPS/QPS、事务延迟、错误/重试率;慢查询与锁等待是主要优化方向。
  • 资源
    • CPU:用户态/系统态占比、软硬中断;内存:可用与缓存命中;磁盘:await、svctm、util;网络:带宽占用、丢包/重传。
  • 稳定性
    • 错误率(5xx/4xx/超时)、连接失败、进程崩溃;长时测试(≥30分钟)更能暴露稳定性问题

四、常见瓶颈与快速优化

  • Nginx
    • worker_processes auto;worker_rlimit_nofile 65535;sendfile on;keepalive_timeout 65;keepalive_requests 100000;gzip 可按需开启;server_tokens off;tcp_nodelay on。
  • PHP-FPM
    • 进程模型与池配置:合理设置 pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers;启用 opcache(示例:opcache.enable=1;opcache.memory_consumption=256;opcache.max_accelerated_files=10000;按需开启 JIT)。
  • MySQL/MariaDB
    • 内存:innodb_buffer_pool_size 设为内存的50%–80%;连接:max_connections 与业务匹配;开启慢查询日志并定期分析;必要时使用 Percona Toolkit 深入诊断。
  • Linux 系统
    • 文件描述符:ulimit -n 65535;内核网络:net.core.somaxconn 65535;net.ipv4.ip_local_port_range 1024 65535;net.ipv4.tcp_fin_timeout 30;net.core.netdev_max_backlog 65535;如用防火墙/连接跟踪,适当提升 nf_conntrack_max。
  • 监控与日志
    • 实时:nmon/htop/vmstat/iostat/ss;服务状态:systemctl status nginx/mysql/php-fpm;日志:/var/log/nginx/error.log、/var/log/mysql/error.log、PHP 错误日志(php.ini 中 error_log 指定)

五、测试流程与注意事项

  • 流程建议
    • 基线:低并发→逐步提升并发(如 50→100→200→400),每档至少5–10分钟;记录 RPS、P95/P99、错误率与资源曲线。
    • 专项:静态文件、动态 PHP、数据库分开展开;必要时做“仅数据库”“仅应用”隔离测试。
    • 回归:每次调参后重复相同场景,验证是否带来稳定提升。
  • 注意事项
    • 生产环境避免直接压测;在隔离环境或维护窗口进行。
    • 预热:长时测试前先跑1–2分钟暖机,避免冷缓存影响。
    • 结果可复现:固定测试文件大小、SQL 语句、并发模型与监控采集间隔。
    • 安全:限制压测来源 IP;数据库使用专用测试账号隔离库;避免泄露真实数据。

0