2、压测环境搭建:Linux服务器基础配置、Python3环境安装、虚拟环境与依赖管理

做压测,环境搭不好,后面全白干。我见过太多人,工具装了一整天,最后发现Python版本不对,依赖冲突到崩溃。说白了,压测环境就是个地基,地基不稳,楼盖得再高也得塌。

这一章,咱们就把地基打牢。我会带着你,从一台裸机Linux开始,一步步配好Python3、搭好虚拟环境、装好依赖。嗯,都是我在项目中踩过坑之后总结出来的「标准动作」。

2.1 Linux服务器基础配置

先说说服务器选型。我个人习惯用CentOS 7.9或Ubuntu 20.04 LTS,这两个版本社区活跃,坑少。如果你用的是云服务器,记得选「最小化安装」,别装图形界面——压测服务器不需要桌面,多一个服务就多一个风险点。

2.1.1 系统更新与基础工具

拿到服务器第一件事,更新系统源。别偷懒,我遇到过因为源太旧,装Python时报依赖缺失,折腾了两小时。

# CentOS/RHEL
sudo yum update -y
sudo yum install -y epel-release
sudo yum install -y wget curl git vim net-tools

# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt install -y wget curl git vim net-tools
我的小习惯:装完基础工具后,顺手把时区改成上海,不然日志时间对不上,排查问题很痛苦。
sudo timedatectl set-timezone Asia/Shanghai

2.1.2 关闭防火墙与SELinux(测试环境)

压测环境里,防火墙和SELinux经常会拦截压测流量。我曾经有一次压测TPS死活上不去,查了半天,发现是防火墙把连接数给限了。所以,测试环境我建议直接关掉。

# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 关闭SELinux(CentOS)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
注意:生产环境千万别这么干!这里只针对压测专用服务器。如果你是在生产服务器上做压测,请用iptables规则放行特定端口,而不是直接关防火墙。

2.1.3 调整系统参数

压测时,Linux默认的TCP参数会限制并发连接数。你想想看,一台服务器默认只能开1024个文件句柄,压测工具一跑,瞬间就满了。所以必须调大。

# 临时生效
ulimit -n 65535
ulimit -u 65535

# 永久生效(修改 /etc/security/limits.conf)
echo '* soft nofile 65535' >> /etc/security/limits.conf
echo '* hard nofile 65535' >> /etc/security/limits.conf
echo '* soft nproc 65535' >> /etc/security/limits.conf
echo '* hard nproc 65535' >> /etc/security/limits.conf

还有TCP内核参数,我一般这样配:

# 追加到 /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# 生效
sudo sysctl -p
核心思路:压测环境要「放开手脚」,让工具能充分发挥。限制越少,压测结果越接近真实瓶颈。

2.2 Python3环境安装

Python版本这块,我踩过一个大坑。之前用系统自带的Python 3.6跑locust,结果有个依赖库只支持3.8+,折腾了半天才搞定。所以我现在一律手动装Python 3.9或3.10。

2.2.1 从源码编译安装

为什么不用yum/apt装?因为系统源里的Python版本通常比较老,而且不好管理多版本。源码安装虽然麻烦点,但一劳永逸。

# 安装编译依赖
sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel

# 下载Python 3.9.18
wget https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz
tar -xzf Python-3.9.18.tgz
cd Python-3.9.18

# 配置、编译、安装
./configure --enable-optimizations --prefix=/usr/local/python3.9
make -j $(nproc)
sudo make install
避坑指南:我曾经在编译时忘了装libffi-devel,结果装完Python后,pip install某些包时报「ModuleNotFoundError: No module named '_ctypes'」。所以编译依赖一定要装全。

2.2.2 配置软链接与pip

# 建立软链接
sudo ln -sf /usr/local/python3.9/bin/python3.9 /usr/bin/python3
sudo ln -sf /usr/local/python3.9/bin/pip3.9 /usr/bin/pip3

# 验证
python3 --version
pip3 --version

验证通过后,记得升级pip:

pip3 install --upgrade pip

2.3 虚拟环境与依赖管理

虚拟环境这东西,说白了就是给每个项目一个独立的Python「小房间」。你想想看,如果所有项目都共用一套Python包,A项目要requests 2.25,B项目要requests 2.28,那不就打架了吗?

2.3.1 使用venv创建虚拟环境

Python 3.3+自带venv模块,不需要额外安装。我个人习惯把虚拟环境放在项目目录下,名字就叫.venv。

# 创建虚拟环境
python3 -m venv .venv

# 激活虚拟环境
source .venv/bin/activate

# 验证
which python
# 输出应该指向 .venv/bin/python

激活后,命令行前面会出现(.venv)的提示符,一眼就能看出来当前在哪个环境里。

2.3.2 安装压测依赖

以locust为例,这是我最常用的压测工具。安装命令很简单:

pip install locust

但实际项目中,依赖往往不止一个。我习惯用requirements.txt来管理:

# requirements.txt
locust==2.20.1
requests==2.31.0
numpy==1.24.3
pandas==2.0.3
psutil==5.9.5

# 批量安装
pip install -r requirements.txt
为什么固定版本号?我在项目中吃过亏——某次升级locust后,压测脚本的API变了,导致整个压测流程中断。固定版本号,保证环境可复现,这是专业做法。

2.3.3 退出与删除虚拟环境

# 退出虚拟环境
deactivate

# 删除虚拟环境(直接删目录)
rm -rf .venv

嗯,就是这么简单。虚拟环境本质就是个目录,删了重来毫无压力。

2.4 本章知识体系

下面这张图,把整个环境搭建的流程串起来了。你可以把它当作一个「检查清单」,每次搭环境时对照着来。

压测环境搭建流程 第一步:Linux服务器基础配置 • 系统更新与基础工具安装 • 关闭防火墙与SELinux • 调整系统参数(文件句柄、TCP参数) 第二步:Python3环境安装 • 从源码编译安装Python 3.9+ • 配置软链接与pip • 验证安装版本 第三步:虚拟环境与依赖管理 • 使用venv创建虚拟环境 • 安装压测依赖(locust等) • 使用requirements.txt管理版本 ✅ 环境搭建完成,可以开始压测

2.5 常见问题与避坑

问题 原因 解决方案
pip安装超时 默认源在国外,网络不稳定 使用国内镜像源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
编译Python时报错 缺少编译依赖包 安装gcc、openssl-devel、libffi-devel等
虚拟环境激活后pip仍用系统版 PATH环境变量未正确设置 检查which pip路径,重新激活环境
locust启动报端口被占用 上次压测进程未完全退出 kill -9 $(lsof -ti:8089) 强制释放端口
重要提醒:每次压测前,建议先跑一遍pip list确认依赖版本。我曾经因为环境被意外污染,压测结果偏差了30%,排查了整整一天才发现是依赖版本不对。

好了,环境搭好了,工具也装齐了。下一章咱们就开始写第一个压测脚本,真正跑起来。记住,环境搭建这一步虽然枯燥,但它是整个压测流程的基石。基础打牢了,后面才能跑得快、跑得稳。

想要更多资料,联系可可