簡體   English   中英

Linux下Java進程上的大量CPU使用率

[英]Large CPU usage on a java process under Linux

我遇到麻煩來確定我的軟件出了什么問題。 情況是; -該程序始終在后台運行,每隔X分鍾執行一些操作。 -現在,它設置為每1分鍾檢查一次某個目錄,並查看其中是否有新文件。 -如果有新文件,則將它們處理並移動到其他位置。 -如果不是,則只記錄事件並再次進入空閑狀態。

我假設出現新文件時,CPU使用率可能會很高。 問題來了,即使我很多天都沒有在目錄中放置新文件了,它也會在檢查新條目時每分鍾將CPU使用率提高到〜90%,然后在幾秒鍾后恢復到<1%使用率。

Windows下的相同進程似乎在某種程度上很穩定,始終保持低CPU使用率。

如果我每月監視一次CPU活動,我可以看到我Java進程的平均CPU使用率一直在增長(沒有將新文件“激活”其余進程),並且我必須重新啟動進程才能返回降低CPU使用率水平。

我真的不是很了解這種行為,所以我真的不知道什么可能會影響這種行為。

如果日志文件有點“大”,例如10-20mb,那么每分鍾要記錄一個新條目是否需要那么多的cpu?

如果為此過程在類路徑中加載了許多庫,那么即使大多數時間都不會使用許多此類庫,CPU使用率還會增加嗎?

對不起,如果我不清楚我的問題,我對此有些陌生。

預先感謝每一位,問候。

--edit--我注意到您的建議,我將進行一些監視,並發布一些代碼/結果與您分享,看看您能提出什么建議!

我現在真的迷路了!

如果您的自定義監視代碼引起了問題,則可以始終使用諸如Apache Commons IO的FileAlterationMonitor之類的標准 它實現起來很簡單,而且可能比修復當前代碼要快。

您是在談論簡單的控制台應用程序還是swing / awt應用程序?

該應用程序是否按時間表通過底層操作系統每分鍾運行,還是一個簡單的服務器進程?

如果該進程作為服務器運行,則如何啟動VM? (服務器VM或客戶端VM--在cmd行上的服務器開關)

您還可以檢查您的垃圾收集器,有時日志記錄框架會用完太多對象而沒有釋放它們的引用。

問候

M.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM