【发布时间】:2016-12-30 19:06:24
【问题描述】:
我们正在使用 Fitnesse 对基于 Web 的复杂应用程序进行验收测试。完整的套件需要几个小时才能通过,因此我们正在使用多个进程。设置如下:
- maven forks Fitnesse 服务器进程
- maven 向 Fitnesse 服务器发起 http 调用
- fitnesse 服务器为每个调用派生一个测试运行器
- http调用返回,返回2。
3.中启动jvm的命令行基于http调用参数构建在fitnesse jar中。这意味着您不能传入任意 jvm 参数,只能传入受支持的参数。
现在,我们面临的问题是,有时启动 3 次的进程会挂起。它看起来不像是超时问题,因为我们已经看到它们挂了几个小时。
这些 jvm 进程不会通过 jmx 公开任何内容,因此我们无法使用 jconsole 或类似方法连接到它们。根据每个进程消耗的内存量(1-1.5G),我强烈怀疑 OOM 发生在 runner 进程的某个地方并阻止它正常退出。此外,在服务器进程上尝试“kill -3”会产生
Exception in thread "CommandRunner stdOut" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3332)
在启动的运行程序进程中似乎是标准输出,但我不确定。
我目前正在考虑的解决方案是创建控制命令行的类的副本,以便每个进程都以随机的 jmx 端口和调试端口启动,因此如果它挂起 - 可以连接和调查。
所以,问题是 - 有更好的方法吗?我在这里遗漏了什么明显的东西吗?
【问题讨论】:
-
您是否需要一个生成测试运行器的进程?我有一个类似的并行化测试套件,但我的每个子套件都是完全独立的。这对你有用吗?
-
@FriedHoeben,原则上可以。但这意味着我必须重写整个事情。我们的这部分测试基础设施是继承的,我不想花很多时间从头开始重写它。
标签: java remote-debugging fitnesse fitnesse-slim