3. 压测环境搭建
好,咱们进入实战环节。说实话,很多压测翻车,不是工具不行,而是环境没搭好。我见过太多人直接在服务器裸奔装包,结果依赖冲突搞到心态爆炸。今天咱们就把这套流程捋顺,保证你以后搭环境不再踩坑。
核心思路:隔离、干净、可复现。说白了,就是让压测环境跟服务器上其他服务互不干扰,出了问题也能一键重建。
3.1 Linux服务器压测环境准备
先说说服务器选型。我个人习惯用 CentOS 7 或 Ubuntu 20.04 以上的版本。为什么?因为这两个生态最成熟,遇到问题网上随便一搜就有答案。
嗯,这里要注意几个前置条件:
- 内核参数调优:压测时并发连接数会很高,默认的
ulimit -n只有 1024,根本不够用。我曾经有一次压测到一半,连接数直接爆了,排查了半天才发现是文件描述符限制。 - 关闭防火墙和 SELinux:测试环境别给自己找麻烦,这些东西生产环境再开。
- 时间同步:压测日志的时间戳必须准确,不然分析性能瓶颈时你会疯掉。
我一般会先跑一个检查脚本,把基础环境扫一遍:
# 检查系统版本
cat /etc/os-release
# 调整文件描述符限制
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
# 关闭防火墙(测试环境)
systemctl stop firewalld
systemctl disable firewalld
# 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 安装基础工具
yum install -y wget curl git vim net-tools
注意:千万别在生产服务器上跑这些命令!我当年刚入行时就在线上环境关了防火墙,结果被运维大哥追着骂了三条街。测试环境归测试环境,生产归生产,这个边界要拎清。
3.2 Python虚拟环境配置
为什么要用虚拟环境?你想想看,服务器上可能已经装了 Python 3.6,但压测工具需要 Python 3.9,而且依赖的包版本还不一样。直接装的话,系统自带的工具可能就挂了。
我推荐用 venv,它是 Python 3.3+ 自带的模块,轻量又好用。当然,如果你喜欢 conda 或者 virtualenv 也行,看个人习惯。
具体操作很简单:
# 安装 Python 3.9(如果系统没有)
yum install -y python39 python39-devel
# 创建虚拟环境
python3.9 -m venv /opt/loadtest_env
# 激活虚拟环境
source /opt/loadtest_env/bin/activate
# 验证一下
which python
# 输出应该是 /opt/loadtest_env/bin/python
激活后,你的终端前面会出现 (loadtest_env) 的标识。这时候你安装的所有包,都只会放在这个目录下,不会污染系统环境。
小技巧:我习惯在项目根目录放一个 .env 文件,里面写上虚拟环境的路径。这样团队其他人拉下来代码,直接 source .env 就能激活,不用每次都去翻文档。
3.3 依赖安装
好,环境准备好了,接下来装依赖。压测常用的 Python 库有这些:
| 库名 | 用途 | 版本建议 |
|---|---|---|
locust |
分布式压测框架 | 2.15+ |
requests |
HTTP 请求库 | 2.28+ |
psutil |
系统资源监控 | 5.9+ |
pandas |
结果数据分析 | 1.5+ |
matplotlib |
图表绘制 | 3.6+ |
nvidia-ml-py |
GPU 显存监控 | 11.0+ |
安装命令很简单:
# 确保在虚拟环境中
pip install --upgrade pip
# 批量安装
pip install locust requests psutil pandas matplotlib nvidia-ml-py
# 或者用 requirements.txt
pip install -r requirements.txt
这里有个坑,我必须要说。有一次我在一台新服务器上装 nvidia-ml-py,死活装不上。查了半天才发现,这台机器没装 NVIDIA 驱动。你想想看,没有驱动,你怎么监控显存?
避坑指南:装 nvidia-ml-py 之前,先确认 nvidia-smi 命令能正常输出。如果报错,说明驱动没装好。我曾经在一台云服务器上折腾了俩小时,最后发现是 GPU 虚拟化没开。
装完之后,验证一下:
# 检查 locust 版本
locust --version
# 检查 GPU 监控库
python -c "import pynvml; print('OK')"
# 导出依赖清单(方便其他人复现)
pip freeze > requirements.txt
3.4 知识体系总览
说了这么多,咱们用一张图把整个流程串起来。这样你脑子里就有个全局概念了。
这张图把咱们今天讲的内容串起来了。从左到右,先搞定服务器基础环境,再搭好 Python 虚拟环境,最后装上压测需要的依赖包。每一步都有坑,但只要你按这个流程走,基本不会出大问题。
我的习惯:每次搭完环境,我都会把 requirements.txt 和 setup.sh 脚本一起提交到 Git 仓库。这样换机器或者加新人,直接拉代码跑脚本,十分钟搞定。别问我为什么这么熟练——当年手动搭了二十多台压测机,搭到想吐。