【问题标题】:Large CPU usage on a java process under LinuxLinux下java进程占用大量CPU
【发布时间】:2011-11-17 23:18:17
【问题描述】:

我在确定我的软件出了什么问题时遇到了麻烦。 情况是; - 程序始终在后台运行,每 X 分钟执行一些操作。 - 现在它设置为每 1 分钟检查一次某个目录并查看其中是否有新文件。 - 如果有新文件,它们会被处理并移动到其他地方。 - 如果没有,它只会记录事件并再次空闲。

我假设当新文件出现时,CPU 使用率可能会有些高。 问题来了,即使我很多天没有在目录中放入新文件,CPU 使用率也会提高到每分钟检查新条目的 90%,然后在几秒钟后,返回到

windows 下的相同进程似乎有点稳定,始终保持低 cpu 使用率。

如果我每月监控 CPU 活动,我可以看到我的 java 进程的平均 CPU 使用率不断增长(没有放置新文件来“激活”进程的其余部分),我必须重新启动进程它会返回到较低的 CPU 使用率水平。

我真的不了解这种行为,所以我真的不知道可能会影响到什么。

如果日志文件有点“大”,比如 10-20mb,每分钟记录一个新条目是否需要那么多 CPU?

如果此进程的类路径中加载了许多库,即使这些库中的许多库不会一直使用最多,cpu 使用率是否也会增加?

如果我对我的问题不是很清楚,请原谅,我对此有点陌生。

提前谢谢大家,问候。

--编辑-- 我注意到你的建议,我会做一些监控,我会发布一些代码/结果与你分享,看看你能想出什么!

我现在真的迷路了!

【问题讨论】:

  • 您可能需要显示扫描目录并附加到日志文件的代码。您所描述的内容中没有任何内容会导致这种行为。
  • 在高 cpu 期间执行线程转储。
  • “大量 CPU 占用”带来的心理图像......
  • 使用分析器准确查看问题所在。

标签: java linux cpu-usage


【解决方案1】:

如果您的自定义监控代码出现问题,您始终可以使用标准的东西,例如 Apache Commons IO 的 FileAlterationMonitor。它实现起来很简单,并且可能比修复当前代码更快。

【讨论】:

  • 我在进程外部执行监控,所以这不应该是问题!我正在使用 linux 命令,例如 top、mpstat、sar 等。
【解决方案2】:

您说的是简单的控制台应用程序还是 swing/awt 应用程序?

应用程序是按计划通过底层操作系统每分钟运行一次,还是一个简单的服务器进程?

如果进程作为服务器运行,你如何启动虚拟机? (服务器虚拟机或客户端虚拟机 - 命令行上的服务器开关)

你也可以检查你的垃圾收集器,有时日志框架在没有释放它们的引用的情况下使用了太多的对象。

问候

M.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2013-06-13
    • 2016-05-17
    相关资源
    最近更新 更多