You need to enable JavaScript to run this app. 如何优雅停止高并发XMPP压力场景下运行的Tsung进程?
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅停止高并发XMPP压力场景下运行的Tsung进程?

高并发XMPP压测场景下Tsung进程的优雅终止实操

核心原则

绝对不要上来用kill -9强杀进程。带10万XMPP长连接并发的Tsung进程,强杀会瞬间在被压XMPP服务端刷出大量异常断连的脏日志,同时压测侧的采集数据会直接丢失,后续根本没法生成完整的压测报告。

标准优雅终止流程

  • 首先定位Tsung的主控制进程PID:执行ps aux | grep tsung,筛选出带tsung start启动参数的那个进程,注意区分各个工作节点上的Erlang worker进程,只有主控制进程才是全局的流程调度入口。
  • 给主控制进程发送SIGTERM终止信号:kill -TERM <上面查到的主进程PID>
    这个信号会触发Tsung内置的优雅退出逻辑,完整流程包括:
    • 立刻停止生成新的压测请求,不再唤起新的XMPP会话
    • 同步通知所有分布式工作节点上承载的10万XMPP连接,逐一按照XMPP协议规范走正常下线流程(发送离线Presence报文、正常关闭XML流、四次挥手断开TCP连接),不会直接掐断连接
    • 等所有会话的断连流程全部走完后,把已经采集到的吞吐量、响应时间、成功率等压测指标全量落盘到Tsung的工作log目录,生成完整的统计报告
    • 最后自动退出主节点、所有工作节点的相关进程,整个过程不需要人工逐台操作工作机。

高负载场景的注意事项

因为10万并发的场景下,Tsung主节点的CPU、内存负载都处于高位,信号接收、流程调度会有延迟,不要看到进程没立刻退出就反复强杀:

  • 给主进程留1-3分钟的处理时间,毕竟10万长连接逐一走协议下线握手本身就需要一定时长,不是程序卡死。
  • 如果超过5分钟主进程依然没有退出,不要直接用pkill beam这类命令扫杀所有Erlang进程,这种操作会误杀机器上其他独立运行的Erlang服务(比如本地的RabbitMQ、其他业务系统)。正确操作是先定位所有和Tsung集群关联的Erlang worker节点,逐个发送SIGTERM信号,最后再给主控制进程发一次SIGTERM触发收尾。

常见操作坑

  • 不要直接在Tsung运行的终端按Ctrl+C触发SIGINT退出,这个信号的处理逻辑会跳过部分长连接的正常下线流程,只等当前在途的短请求跑完就直接断连,会在XMPP服务端残留大量超时清理的僵尸会话,污染压测结果。
  • 优雅停止的过程中不要手动删除Tsung工作目录下的log文件,进程还在持续写入压测数据,强行删除会导致最终的统计报告文件损坏,前面攒的所有压测数据都没法正常解析。

内容的提问来源于stack exchange,提问作者Abdullah Al Mamun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 23:15:03