首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从主java程序启动监视器

从主java程序启动监视器
EN

Stack Overflow用户
提问于 2017-07-18 01:34:35
回答 1查看 38关注 0票数 0

我有一个java程序,它每分钟检查一个数据库,看看某个网站是否需要监控。如果它满足条件,我使用ProcessBuilder将网站URL传递到我的另一个java程序(runnable jar)中……正如我所期望的那样,它会监控网站。

然而,这似乎导致了巨大的内存泄漏。我似乎得到了一个"Java内存不足异常“,即使只有几个网站被监控……我想知道是否有比从JAR中调用JAR更好的方法。

这是我目前启动一个网站监视器的方式:

代码语言:javascript
代码运行次数:0
运行
复制
if(URL.length() > 1) {

        ProcessBuilder builder = new ProcessBuilder("java", "-jar", "/usr/opt/monitor/Monitor.jar", URL);
        builder.redirectErrorStream(true);
        builder.redirectOutput(new File("/usr/opt/logs/Monitor.log"));
        Process p = builder.start(); 

有没有人能建议一个更好的方法来实现这一点呢?线程?直接从Monitor.jar调用这个类?

EN

回答 1

Stack Overflow用户

发布于 2017-07-18 02:08:03

每个进程都会产生大量的内存开销。摆脱进程的最简单方法是在单独线程中的调用进程中直接运行jar文件的主类的方法main(String[])。为了限制同时运行的线程数,使用具有固定线程数的线程池是值得的,否则您可能会因为要处理的URL数量意外增加而耗尽内存。

如果这些措施不起作用,那么监控程序内部就会发生内存泄漏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45150350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档