当前位置:网站首页 >  攻略

Linux服务器高并发压测与性能优化实操全攻略

时间:2026年06月06日 02:56:42 来源:易频IT社区

一、环境准备与工具安装

在进行服务器性能测试之前,必须确保服务器端和压测端已安装必要的工具。本指南以CentOS 7/8系统为例,压测工具选用轻量级且准确的wrk,监控工具选用sysstat

1. 安装压测工具 wrk

在压测端机器(建议与被测服务器在同一内网,避免网络波动干扰)执行以下命令安装依赖并编译wrk:

yum install -y git gcc make
git clone https://github.com/wg/wrk.git
cd wrk
make
cp wrk /usr/local/bin/

安装完成后,输入wrk,若显示版本信息则表示安装成功。

2. 安装系统监控工具 sysstat

在被测服务器上执行以下命令,用于监控CPU、内存、IO及网络上下文切换情况:

yum install -y sysstat

二、性能压测实操步骤

压测的核心目的是模拟高并发场景,获取系统的吞吐量(QPS)、响应时间(Latency)及错误率。

1. 执行压测命令

假设被测服务器IP为192.168.1.100,端口为80。我们使用12个线程,建立400个并发连接,持续压测30秒。执行以下命令:

wrk -t12 -c400 -d30s http://192.168.1.100/

2. 解读压测指标

命令执行后会输出以下关键指标,重点关注Requests/secLatency

  • Requests/sec:服务器每秒处理的请求数,即QPS,数值越高性能越好。
  • Latency:响应延迟,重点关注平均值和Stdev(标准差)。Stdev越大说明响应越不稳定。
  • Req/Sec:每个线程每秒处理的请求数,用于判断线程负载是否均衡。
  • Socket errors:如果出现connect、read或write错误,说明服务器已无法承载当前并发,或连接数被限流。

三、系统瓶颈诊断与分析

在压测进行的同时,需要在服务器端开启监控窗口,实时查看系统资源消耗情况。

1. 查看CPU与负载(vmstat)

执行命令vmstat 1 5(每秒刷新一次,共5次)。重点关注以下列:

  • r:运行队列长度。如果长期大于CPU逻辑核心数,说明CPU计算能力饱和。
  • b:阻塞进程数。如果数值不为0,说明进程在等待IO(磁盘或网络),存在IO瓶颈。
  • us:用户态CPU占用。过高说明应用程序计算量大。
  • sy:内核态CPU占用。过高(超过15%-20%)通常意味着系统在进行大量的上下文切换或系统调用。
  • id:CPU空闲率。如果为0,说明CPU已跑满。

2. 查看IO等待(iostat)

执行命令iostat -x 1 5。重点关注%util

  • %util:设备IO利用率。如果接近100%,说明磁盘读写已成为性能瓶颈。
  • await:IO平均等待时间。数值越大,IO响应越慢。

3. 查看网络连接状态(ss)

执行命令ss -s查看总连接数。执行以下命令查看TCP连接状态分布:

ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c

如果TIME_WAIT数量过多(超过几万),说明端口占用未及时回收,会导致“Cannot assign requested address”错误。如果SYN_RECV过多,可能遭受SYN Flood攻击或全连接队列溢出。

四、Linux内核参数深度优化

Linux服务器高并发压测与性能优化实操全攻略

针对高并发场景,默认的Linux内核参数过于保守。修改配置文件/etc/sysctl.conf,在文件末尾添加以下完整配置:

 1. 增加系统文件描述符限制(全局)
fs.file-max = 1000000
2. 允许系统打开的端口范围
net.ipv4.ip_local_port_range = 10000 65000
3. 优化TCP连接队列,防止全连接队列溢出导致丢包
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
4. 加快TCP连接回收,减少TIME_WAIT占用
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
5. TCP Keepalive保活机制设置
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
6. 增加读写缓冲区大小,提升高吞吐下的网络性能
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
7. 优化网络设备接收队列,防止网卡丢包
net.core.netdev_max_backlog = 30000
8. 关闭swap分区,防止内存不足时系统交换导致性能骤降(视内存情况而定)
vm.swappiness = 10

配置修改完成后,执行以下命令使配置立即生效:

sysctl -p

五、系统资源限制调整

即使内核参数允许,如果用户进程的文件描述符限制(ulimit)过低,依然会导致“Too many open files”错误。

1. 修改 limits.conf

编辑文件/etc/security/limits.conf,在文件末尾添加:

 soft nofile 65535
hard nofile 65535

2. 修改系统启动文件

编辑/etc/systemd/system.conf,取消以下两行的注释并修改数值:

DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535

修改完成后,重启服务器或重新登录用户,执行ulimit -n验证是否生效,输出应为65535。

六、应用层优化配置(以Nginx为例)

服务器优化不仅仅是系统层面,应用层配置同样关键。以Nginx为例,编辑nginx.conf

user nginx;
worker_processes auto;  自动匹配CPU核心数
worker_rlimit_nofile 65535;  设置worker进程最大打开文件数
events {
use epoll;  使用高效的IO多路复用模型
worker_connections 10240;  每个worker进程允许的最大连接数
multi_accept on;  尽可能多地接受连接
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;  零拷贝技术,提升文件传输效率
tcp_nopush on;
tcp_nodelay on;  禁用Nagle算法,降低延迟
keepalive_timeout 30;  设置较短的keepalive超时,快速回收连接
开启高效文件传输
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
}

配置修改后,执行nginx -t检查语法,无误后执行nginx -s reload重载配置。

七、优化效果验证

完成上述所有步骤后,再次执行第二步中的压测命令:

wrk -t12 -c400 -d30s http://192.168.1.100/

对比优化前后的数据:

  • QPS应显著提升。
  • Latency应明显降低,且Stdev更小。
  • 服务器端vmstat中的sy(内核态占用)应降低,说明上下文切换减少。
  • Socket errors应变为0。

若QPS仍未达标,需检查应用代码逻辑(如是否有数据库锁、慢查询)或考虑垂直/水平扩展硬件资源。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图