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
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
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
2.3.3 退出与删除虚拟环境
# 退出虚拟环境
deactivate
# 删除虚拟环境(直接删目录)
rm -rf .venv
嗯,就是这么简单。虚拟环境本质就是个目录,删了重来毫无压力。
2.4 本章知识体系
下面这张图,把整个环境搭建的流程串起来了。你可以把它当作一个「检查清单」,每次搭环境时对照着来。
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%,排查了整整一天才发现是依赖版本不对。
好了,环境搭好了,工具也装齐了。下一章咱们就开始写第一个压测脚本,真正跑起来。记住,环境搭建这一步虽然枯燥,但它是整个压测流程的基石。基础打牢了,后面才能跑得快、跑得稳。
想要更多资料,联系可可