我有一台Jenkins服务器,附带了大约50个奴隶。 我试图对Jenkins Build Queue进行一些压力测试,因为我还没有找到任何关于它的文档。
我只有一步的简单参数化作业,BRANCH和COUNT是作业参数。工作在10到30秒之间随机休眠:
#bash
RESULT="/path/to/results_dir/$BRANCH/$BUILD_ID.txt"
SEC=$(shuf -i10-30 -n1)
sleep $SEC
echo -e "$NODE_NAME\t$BUILD_TAG\t$SEC\t$COUNT" > $RESULT
我想这份工作15K次。 起初我尝试从命令行使用Jenkins REST API:
for c in $(seq 1 15000); do curl -X POST http://<server ip>:8080/job/TEST_SIMPLE/buildWithParameters --data-urlencode "token=TEST" --data-urlencode "BRANCH=<branch name>" --data-urlencode "COUNT=${c}"; done
但是一小时后只提交了4K任务,所以我杀死了循环并清除了Jenkins构建队列。
我的第二次尝试是使用另一个触发这个&#39; TEST_SIMPLE&#39;通过使用系统groovy脚本并调用&#39; job.scheduleBuild&#39; API。它目前运行1.5小时,仅提交了15K中的8K任务。
似乎只有当奴隶从队列中取出一个
时才会将任务添加到队列中这项工作的目的是为我们的测试套件替换一个非常旧的执行器/调度程序,它包含许多测试(~15K)并且我使用Jenkins进行POC,因为我们已经将它用于我们的构建并运行它旧遗嘱执行人。
所以我的问题是: 1.构建队列的大小是否有限制? 2.有没有办法快速提交这么多请求?
感谢。
答案 0 :(得分:0)
如果我理解你的帖子你想知道:
让我先回答第二个问题。要更快地提交请求,您可以将并行xargs
与curl
一起使用。这将允许您使用多个线程来提交curl
个请求。
seq 1 20 | xargs -n 1 -P 10 -I cnt curl -X POST http://<server ip>:8080/job/TEST_SIMPLE/buildWithParameters --data-urlencode "token=TEST" --data-urlencode "BRANCH=<branch name>" --data-urlencode "COUNT=cnt"
xargs -n 1 -P 10 -I cnt
命令使用变量名称&#39; cnt&#39;将参数一次(-n 1
)传递给curl
。 (-I cnt
)并行(-P 10
有10个主题)。
根据您用于生成负载的计算机上的处理器数量,您可以使用非常多的线程。过高,当线程争夺处理器时,您产生负载的能力将下降。在大多数现代笔记本电脑上,我会从50开始推动,直到风扇听起来像喷气发动机,但那就是我。
就队列限制而言,它肯定会受到内存和磁盘的限制,但我必须深入了解源代码,看看是否存在其他限制。