2016-07-25 17 views
0

我有一個I/O密集型的Java Tomcat應用程序,我想在更現代的集羣環境中執行htmlunit測試。因此我也考慮了docker,它可以通過應用swarm等提供很酷的功能。I/O密集型Java應用程序在有限資源上的Docker上加速

測試針對oracle數據庫運行,並在本地I/O上創建流量。我只對一個問題感到好奇:

當我運行測試時,使用有限資源的產品進行簡單安裝(load15因子在1 CPU系統上高於2),測試執行時間比在相同的環境(有限的資源)上使用測試執行的碼頭化方法。如果有足夠的資源將負載因數保持在1以下(在1 CPU系統上),則普通安裝和dockerized安裝之間的運行時間幾乎相同。

我正在尋找解釋這一點的方法。是關於一些覆蓋文件系統緩存機制?在研究這個問題時,在哪裏看?

+1

確切的答案需要對系統進行全面分析,但如何實現這種情況的一個例子是如果您並行創建大量I/O工作。如果遇到CPU限制,您的I/O將會更加連續,因此速度更快。或者更一般地說:性能降低概況將根據所遇到的瓶頸而變化。 – biziclop

回答

1

該答案對您的應用程序非常具體,因此您只需測試各種碼頭存儲設置即可。

首先,用local data volume測試應用程序。可以是local volumemounting a local directory as a volume。這消除了大部分開銷,並且應該儘可能接近主機IO速度。

如果您的應用程序全速運行,那麼很可能是docker storage driver是罪魁禍首,因此您可以嘗試使用docker守護程序的其他選項來查看哪一個最適合。

  • 不要在循環模式下使用devicemapper! --storage-driver==devicemapper \ --storage-opt dm.loop*
  • AUFS預4.x的內核--storage-driver==aufs
  • OverlayFS --storage-driver==overlay2overlay
  • 直接LVM --storage-driver==devicemapper \ --storage-opt dm.datadev=/dev/dockervg/datalv \ --storage-opt dm.metadatadev=/dev/dockervg/metadatalv
    這也需要一些lvm設置。

與每個驅動程序進行測試。
每次交換時,您的容器數據都將被銷燬。
然後使用最好的驅動程序。

安裝本地卷可能是最快的,如果你選擇那麼你處理的數據被存儲在容器外。

+0

感謝您的回答。對此我感到非常抱歉,但我混淆了它:這是碼頭化方法,在有限資源的簡單安裝上執行測試的速度提高了35%......我只是想了解其原因。 – ferdy

+0

@ferdy哦,我明白你的意思了...但這是一個奇怪的情況。同樣,這對您的應用程序和系統設置非常具體,因此您可能得不到一個好的答案。您可以添加一些有關您的有限資源設置與其他設置相比的更多細節嗎? – Matt

+0

一旦添加了系統詳細信息,您可能會獲得更多幫助,將此問題移至unix堆棧站點或可能出現服務器故障。 – Matt