2010-03-26 17 views
0

我們開發了一個Java獨立程序。我們在Linux(RedHat ES 4)cron 中配置了計劃,每10分鐘執行一次此Java獨立版。每個獨立的 可能需要超過1小時才能完成,或者有時甚至可能在5分鐘內完成 。控制在Linux中運行的最大Java獨立程度

我正在尋找的問題/解決方案是,任何時候執行 的Java獨立程序的數量不應超過,例如5個進程。因此,例如,即使在Java獨立/進程啓動之前,如果已經有5個進程正在運行,那麼 ,那麼這個進程不應該啓動;否則這將間接啓動 創建OutOfMemoryError的問題。我如何控制這個?我也想讓這5個過程限制可配置。

其他信息:
我也配置-Xms-Xmx堆大小設置。

有沒有我們可以控制的工具/機制?

我也聽說過Java Service Wrapper。這是怎麼回事?

+0

-Xms和-Xmx將爲給定的JVM配置JVM堆大小,沒有足夠的堆 - > OutOfMemoryError。您的程序的每個實例都將在其自己的JVM(進程)中運行,因此除非一個正在運行的程序影響另一個正在運行的程序的負載,否則正在運行的程序的數量與OutOfMemoryError之間應該沒有關聯... – pgras 2010-03-26 11:54:43

回答

1

首先,我假設你正在互換地使用「線程」和「過程」兩個詞。兩個想法:

  1. cron作業是一個腳本,它將檢查當前正在運行的進程並對它們進行計數。如果小於閾值產生新進程,否則退出,這裏可以在腳本中定義閾值。
  2. 在執行的java文件中有主要方法檢查一些運行進程的外部資源(文件,數據庫表等),如果它低於閾值增量和啓動進程,否則退出(這是假設簡單主要方法將不足以導致您的OOME問題)。您可能還需要在外部資源上使用適當的鎖定機制(儘管如果您的工作每10分鐘一次,這可能會矯枉過正),您可以在.properties中定義閾值或爲程序定義一些其他配置文件。
+0

嗨,Jessup,你說得對。我用這兩個詞互換。我再次編輯了這個問題:「我也聽說過Java Service Wrapper,這是關於什麼的?」對此有何想法/評論? – Gnanam 2010-03-26 11:52:32

+0

@jessup你有任何簡單的cron作業腳本來檢查當前正在運行的進程嗎?我不是Linux schell腳本的專家。或者,給我一些這方面的鏈接。 – Gnanam 2010-03-27 05:22:30

8

您可以創建5個空文件(名稱爲「1.lock」,...,「5.lock」),並讓應用程序鎖定其中的一個來執行(或者如果所有文件都已被鎖定,則退出) 。

+0

+1。您可能還需要某種系統來處理所有鎖定時的情況,並且無法進行更多工作。或者沒有做什麼可以嗎? – Thilo 2010-03-26 11:49:46

+0

當您說「...應用程序鎖定...」時,如何鎖定它?你可以與我分享你的想法/鎖定方法嗎? – Gnanam 2010-03-26 11:56:02

+1

'http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html#lock(long,long,boolean)'。你可以通過調用'http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#getChannel()'來獲得'FileChannel'。 – dimitarvp 2010-03-26 11:59:00

0

Java Service Wrapper可以幫助您將java程序設置爲Windows服務或* nix守護進程。它並沒有真正處理您所看到的併發問題 - 最接近的是一個配置設置,如果它的Windows服務不允許併發實例。