在我的java代码中,我在开始时使用new ProcessBuilder("ping", strIP);
,它正常运行,但在24小时后,它会崩溃,显示
无法运行程序“ping”:CreateProcess error = 8有 Java Runtime Environment的内存不足以继续。 本机内存分配(malloc)无法为其分配32744个字节 ChunkPool:分配
我不知道如何解决它。
答案 0 :(得分:1)
如果不杀死进程,Ping进程永远不会停止。
ProcessBuilder pb = new ProcessBuilder("ping", strIP);
Process process = pb.start(); //this will keep running and probably why you get insufficient memory after a long time
... //do whatever you need
process.destroy(); //stop the ping process
答案 1 :(得分:0)
您的代码中存在内存泄漏。在这里发布你的代码。使用JVisualVM监视堆增长,直到遇到此异常。您也可以使用JVisualVM to find your leak。
答案 2 :(得分:0)
new ProcessBuilder("ping", "-c", pingRequestsNumber, strIP);
我觉得evanwong的方式会发送一个未知数量的请求,直到你停止它(这可能是一个更好的解决你的问题的方法),但我的方式一直控制着用过的资源。
我可能会使用我的方法。如果需要,我会多次启动ping过程,但我确信我不会用完内存,我不会强调接收ping的服务器,这对我来说会更容易阅读服务器的日志,......