当下性能测试已成为确保软件质量的关键环节。其中,wrk作为一款轻量级、高性能的HTTP基准测试工具,以其简洁的命令行界面和出色的性能著称。wrk通过-c参数能够模拟高并发的网络请求,帮助我们评估服务器在极端负载下的表现。如果你打算做C10K数万并发连接这个量级的测试,wrk是合适的(相比ab/jmeter等工具),然而,如果你想尝试进行数百万级别的高并发测试时,官方wrk就无能为力了。
首先,wrk不支持自定义源IP地址,这在需要模拟来自不同客户端的请求时尤为不便,做并发测试时TCP连接数也上不去(此时你在curl命令中验证会看到类似Cannot assign request address的错误)。其次,wrk在每个连接上预分配的内存相对较大,这在单机上尝试建立大量连接时,会导致内存资源迅速耗尽,wrk进程会因为OOM被内核杀掉(如果wrk进程突然消失,你通常可以在/var/log/messages中看到形如Out of memory的日志)。这些限制对于需要评估高性能服务的开发者来说,无疑是一个不小的障碍。
在接下来的内容中,我将探讨如何通过修改wrk源码解决上述问题,以期帮助读者更好地利用wrk进行极限并发测试。