You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker启动时Jmeter持续在containerd-shim运行,如何彻底移除?

问题描述

去年使用Jmeter做Web性能测试,后来发现预发布环境持续收到大量API访问,才发现Jmeter一直在运行。排查后发现Ubuntu 22.04机器上的Jmeter进程在containerd-shim中,每次启动Docker(sudo systemctl start docker)都会跟着启动,可通过ps aux | grep jmeter和pstree -p | grep jmeter查看进程。尝试用sudo kill -9 [pid]杀死进程会自动重启;执行docker ps -a和docker images无任何结果;停止containerd(sudo systemctl stop containerd)能终止Jmeter,但重启Docker后又会恢复。需要彻底停止并移除这个containerd中的Jmeter进程。

附上进程排查输出:

irene@irene-OP-LP2:~$ ps aux | grep jmeter
root       21933  0.0  0.0   2220  1584 ?        Ss   11:30   0:00 bash /jmeter/bin/run-lp-endpoint-tests.sh
root       21966  0.0  0.0   1584   888 ?        S    11:30   0:00 /bin/sh /opt/apache-jmeter-5.4.2/bin/jmeter -n -t /jmeter/tests/z-api/lp-endpoints.jmx -l log -f -e -o output/results -JtestGroup= -Jhost= -Jprotocol= -Jport= -Jthreads= -JloopCount=
root       22008  4.8  0.7 2597216 186152 ?      Sl   11:30   0:05 /usr/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -jar /opt/apache-jmeter-5.4.2/bin/ApacheJMeter.jar -n -t /jmeter/tests/z-api/lp-endpoints.jmx -l log -f -e -o output/results -JtestGroup= -Jhost= -Jprotocol= -Jport= -Jthreads= -JloopCount=
irene      22123  0.0  0.0  10124  2400 pts/0    S+   11:32   0:00 grep --color=auto jmeter

irene@irene-OP-LP2:~$ pstree -p | grep jmeter
           |-containerd-shim(21912)-+-bash(21933)---jmeter(21966)---java(22008)-+-{java}(22009)
解决方案

1. 通过containerd原生工具清理残留容器

由于Docker依赖containerd作为运行时,而docker ps无法识别到该容器,直接用containerd的命令行工具ctr处理:

  • 列出所有containerd管理的容器:
    sudo ctr containers list
    
    找到对应Jmeter进程的容器ID(可通过进程关联的路径或名称判断)
  • 停止容器对应的任务:
    sudo ctr tasks kill -s SIGKILL <容器ID>
    
  • 删除该容器:
    sudo ctr containers rm <容器ID>
    
  • 检查是否还有遗留任务,如有则删除:
    sudo ctr tasks list
    sudo ctr tasks rm <任务ID>
    

2. 清理containerd运行时残留目录

如果上述操作后仍有问题,手动清理containerd的runtime目录:

  • 停止Docker和containerd服务:
    sudo systemctl stop docker containerd
    
  • 删除对应容器的runtime目录(默认路径下,子目录名为容器ID):
    sudo rm -rf /run/containerd/io.containerd.runtime.v2.task/moby/<容器ID>
    
  • 重启服务:
    sudo systemctl start docker
    

3. 彻底重置Docker/containerd数据(谨慎操作)

如果前两步都无效,可彻底清理Docker和containerd的所有数据(注意:这会删除所有本地容器、镜像、卷等,需备份重要数据):

  • 停止相关服务:
    sudo systemctl stop docker containerd docker.socket
    
  • 删除所有数据目录:
    sudo rm -rf /var/lib/docker /var/lib/containerd /run/containerd
    
  • 重新启动服务:
    sudo systemctl start docker
    

内容的提问来源于stack exchange,提问作者tokyo-dev-onna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:05:35