我使用 Spring Boot 和 Undertow 开发了一个微服务。我正在通过“在 200 个线程中进行负载测试”来测试服务的性能。
某些请求因 502 错误而失败:“到许多打开的文件”
我的超限:
[root@server-886d5f4f8-54494 java]# ulimit -n
1048576
例如,如果我对 150 个线程进行负载测试,则应用程序运行时不会出现错误并每秒提供 15,000 个吞吐量。
pod 设置:请求 2 个 CPU,没有限制
暗流设置:
server:
undertow:
threads:
worker: 128
io: 16
1 个实例是否应该接受更多并发请求?例如 1000 或 10000?
我需要提供大约 5000 个并发连接/请求。在这种情况下我应该水平扩展(5000/20 = 25 个副本)还是 1 个实例能够处理更多并且我配置不正确?
更新
lsof | 负载测试期间的 wc -l 输出:9791(此计数远小于容器 1048576 中的 ulimit)
更新 2 在 Kubernetes 中启动的应用程序
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size unlimited unlimited bytes
Max resident set unlimited unlimited bytes
Max processes unlimited unlimited processes
Max open files 1048576 1048576 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 2059511 2059511 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
更新 3
所有请求都通过 NodePort