首页 > 解决方案 > 如何在 docker 容器中设置 net.ipv4.tcp_tw_recycle

问题描述

在使用 JMeter docker 做压力测试时,我需要根据这个建议设置tcp_tw_recycle以启用快速回收 TIME_WAIT 套接字。但是我在运行 JMeter docker 容器时遇到了错误消息“/proc/sys/net/ipv4/tcp_tw_recycle: no such file or directory”。

docker run --privileged -i -v /e/JMeter:/JMeter -w /JMeter --rm --sysctl net.ipv4.tcp_tw_recycle=1 vinsdocker/jmserver:latest  -n -t "/JMeter/TestNginx.jmx" -l "/JMeter/log/log.jtl" -e -o "/JMeter/output/"
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"write sysctl key net.ipv4.tcp_tw_recycle: open ?/proc/sys/net/ipv4/tcp_tw_recycle: no such file or directory\"": unknown.

这个 JMeter docker 镜像的基础镜像是“openjdk:8-jre-slim”。

Docker 版本:
Docker 版本 19.03.8,构建 afacb8b

我发现 /sys/net/ipv4/ 文件夹中的文件在不同的 docker 主机上运行时是不同的。在 Docker Desktop for windows 中,我发现了62 个以 /proc/sys/net/ipv4/tcp_* 开头的文件。但是在 CentOS7 中的 Docker for Linux 中只有6 个此类文件。并且没有名为 tcp_tw_recycle 的文件。为什么它们在不同的 Docker 主机中有所不同?

uname -a在 Docker Desktop for windows(Wins10) 的容器中执行。

root@b8a08c3ea9ab:/# uname -a
Linux b8a08c3ea9ab 4.19.76-linuxkit #1 SMP Thu Oct 17 19:31:58 UTC 2019 x86_64 GNU/Linux

uname -a在 Docker for Linux(CentOS7) 的容器中执行。

root@7d929239742c:/# uname -a
Linux 7d929239742c 3.10.0-1127.18.2.el7.x86_64 #1 SMP Sun Jul 26 15:27:06 UTC 2020 x86_64 GNU/Linux

链接:

  1. 在运行时配置命名空间内核参数 (sysctls)
  2. 在 kubernetes 中启用不安全的 Sysctl

标签: dockerjmeter

解决方案


推荐阅读