我有一個Java Soap客戶端發送一些XML文件到遠程服務器進行處理。爲什麼Linux上的一個Java進程與啓動兩次的速度相同?
它使用java 1.7的java.nio.file.WatchEvent<Path>
(幾乎就像它的解釋here)監視添加到目錄的新文件。
它每分鐘處理大約2或3個文件。
尋找一種方法來提高發送和處理文件的速度我決定啓動同一個jar兩次,當然監控不同的目錄。
我無法解釋爲什麼兩個進程仍然每分鐘處理大約2或3個文件。我懷疑問題出在遠程服務器上,因爲我有一個日誌顯示每個文件開始和結束處理的時刻,並且在僅使用一個Linux進程時顯示與使用兩個時相同的行爲。
有關爲什麼會發生這種情況的任何想法?
P.S.1不知道我應該在這裏添加什麼信息。隨意問。
P.S.2該服務器是一個虛擬的和正在使用:
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) Server VM (build 23.3-b01, mixed mode)
日Thnx。
更新1
我的意思是隻使用一個使用兩個時相比,Linux進程時的總吞吐量是相同的。
更新2
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
5 0 0 1716872 0 0 0 0 1874 1960 0 6 17 7 74 2 0
更新3
好,應該有地方比其他CPU的瓶頸。
有關我應該使用哪些工具或工具找到它的任何建議?(請記住,這是一個Java應用程序)
當你說「以相同速度工作」時,你的意思是說,這兩個過程_combined_以與單個過程相同的速度工作,或者兩個_individually_單獨工作?我會承擔第一個案件。可能的瓶頸是文件訪問或帶寬,並且不會通過在兩個內核上運行該進程而加倍。 –
Amdahl法則說你只是沒有CPU限制。 – chrylis
我不明白。文件出現的速度有多快?你是否正在捱餓? *兩個*進程處理2-3 FPM,或*總數*吞吐量2-3 FPM?這些過程在哪裏花費他們的時間?如果是IO,那麼這是一個IO問題,與進程數量無關。 –