我使用k6进行负载测试,运行的命令为k6 run --stage 5s:250 script.js
,script.js 的内容如下:
import { check } from 'k6';
import http from "k6/http";
export default function main(token) {
let res = http.get(
"https://{domain}/schedules"
);
check(res, {
'is status 200': (r) => r.status === 200
});
}
但是输出出现了大量的socket: too many open files
,如下图所示:
服务是基于 Spring Boot 的,使用 Nginx 作为 reverse proxy 。要怎么解决“socket: too many open files”这个问题呢?
我尝试过按照ck :: Nginx socket() failed (24: Too many open files)进行修改,但是没有效果。
1
aladdinding 2021-11-11 18:13:30 +08:00
ulimit ?
|
2
JasonLaw OP @aladdinding #1 我尝试过按照 https://stackoverflow.com/a/27849503/5232255 进行修改,然后 restart Nginx ,还是不行。
|
3
ysc3839 2021-11-11 18:50:51 +08:00
你这是测试程序的问题吧?不是 nginx 的问题。
|
4
Citrus 2021-11-11 18:55:31 +08:00
macOS 终端默认的 ulimit 好像是 256 哦,你改了么?
顺便想问下这是什么压测工具,看起来挺好用的 |
6
setsunakute 2021-11-11 18:57:45 +08:00
看截图是你本机报的这个错误, 不是服务端报的, 所以要改你的 mac 的 ulimit
|
7
JasonLaw OP |
8
ch2 2021-11-11 19:02:49 +08:00
压测机本身也得调参数
|
9
TripleZ 2021-11-11 19:21:24 +08:00 via iPhone
调整测试机的 ulimit nofile 的参数就行。
|
10
JasonLaw OP @ysc3839 #3
@Citrus #4 @setsunakute #6 @ch2 #8 @TripleZ #9 按照 https://apple.stackexchange.com/a/312010/362633 进行修改,问题解决了。 |
11
julyclyde 2021-11-12 15:21:26 +08:00
|