更新時間:2021-11-19 10:01:18 來源:動力節(jié)點 瀏覽1503次
StreamBase Studio 和 StreamBase Server 的 Java VM 內(nèi)存設(shè)置以不同方式獨立定義,如本頁后面部分所述。Studio 和 Server 的默認(rèn)設(shè)置略有不同。此表中的設(shè)置適用于在 Windows 和 UNIX 系統(tǒng)上運行的 64 位服務(wù)器:
| Java VM 內(nèi)存設(shè)置 | 默認(rèn) StreamBase Studio 設(shè)置 | 默認(rèn) StreamBase 服務(wù)器設(shè)置 |
|---|---|---|
| -Xms | 256m | 1克 |
| -Xmx | 768m | 2克 |
在-XX:MaxPermSize使用時設(shè)置不再使用的Java 8,而忽略此設(shè)置了JDK 8 StreamBase版本7.6.0及更高版本捆綁在一起。
此外,默認(rèn)的 JVM 設(shè)置包括-XX:+UseCompressdOops.
在大多數(shù)情況下,您只需要關(guān)注 StreamBase Server 的 JVM 設(shè)置,將在以下部分進行討論。要在 Studio 中編輯非常大的應(yīng)用程序,您可能需要單獨增加 Studio 的內(nèi)存占用,如StreamBase Studio 的 JVM 內(nèi)存中所述。
重要的如果您對上表中服務(wù)器的任何 JVM 內(nèi)存參數(shù)進行顯式設(shè)置,則所有 StreamBase 服務(wù)器默認(rèn)設(shè)置都將被禁用且不再適用。因此,例如,如果您明確設(shè)置 ,-Xmx4g則 的默認(rèn)設(shè)置將-Xms不再適用。最簡單的解決方案是始終同時設(shè)置這兩個設(shè)置中的任何一個。
您可以通過多種方式進行顯式 JVM 設(shè)置以覆蓋默認(rèn)值:在服務(wù)器配置文件中、在命令行中使用-J選項、使用STREAMBASE_JVM_ARGS環(huán)境變量或在自定義啟動腳本中。此注釋適用于您可能設(shè)置 JVM 內(nèi)存設(shè)置的所有方式。
請記住,在一個 Java VM 中運行的 StreamBase Studio 在具有自己的內(nèi)存限制的單獨 JVM 進程中啟動 StreamBase Server。僅增加 Studio 的內(nèi)存設(shè)置無助于服務(wù)器加載大型應(yīng)用程序;事實上,它可能會妨礙它。
從某種意義上說,Studio 和 Server 必須在內(nèi)存受限的系統(tǒng)上爭奪內(nèi)存資源。因此,僅將 Studio 的 JVM 內(nèi)存設(shè)置增加到支持類型檢查和編輯大型應(yīng)用程序的可接受響應(yīng)時間的最小數(shù)量。例如,在用于編輯大型 StreamBase 應(yīng)用程序的 8 GB 64 位系統(tǒng)上,您最多可以為 Studio 分配 2 GB,其余用于服務(wù)器啟動。
Server啟動過程中由native代碼分配的任何內(nèi)存都是在JVM啟動之前分配的。因此,本機代碼服務(wù)器組件分配的內(nèi)存在 JVM 堆之外,并與 Studio 和服務(wù)器競爭整體內(nèi)存資源。
本機代碼內(nèi)存分配包括由sbd啟動器的本機代碼部分分配的任何內(nèi)存,以及由本機代碼運算符和適配器分配的內(nèi)存,以及.so由運算符或適配器調(diào)用的本機代碼 DLL 或文件分配的內(nèi)存。例如,sbd啟動器的本機代碼部分分配一些內(nèi)存用作基于磁盤的查詢表的緩存。如果將服務(wù)器配置文件disk-querytable-cache的元素的參數(shù)調(diào)大,則分配的內(nèi)存在服務(wù)器的JVM堆中不可用。
需要重申的是,Studio 是為應(yīng)用程序的創(chuàng)作、測試和調(diào)試而設(shè)計的,但并非旨在托管 StreamBase 服務(wù)器的高性能運行或服務(wù)器運行的基準(zhǔn)測試。
如果您在沒有配置文件的情況下啟動 StreamBase Server,它將使用上表中顯示的內(nèi)部默認(rèn)設(shè)置啟動。您可以在服務(wù)器配置文件中調(diào)整 StreamBase Server 的 JVM 內(nèi)存設(shè)置。
當(dāng)您在 Studio 中生成默認(rèn) StreamBase Server 配置文件并選擇包含默認(rèn)內(nèi)容時,或者當(dāng)您使用sbd –s生成默認(rèn)配置文件時,新文件包含元素的以下建議設(shè)置:
<java-vm>
<param name="jvm-args" value="
-XX:+使用G1GC
-XX:MaxGCPauseMillis=500 "/>
</java-vm>
垃圾收集策略設(shè)置中描述了默認(rèn)的 GC 設(shè)置。
通過為上表中的-X設(shè)置添加條目,增加服務(wù)器下次啟動時可用的內(nèi)存。對于中型應(yīng)用程序,請使用如下設(shè)置:
-Xms1g -Xmx2g
對于大型應(yīng)用程序,請使用以下設(shè)置:
-Xms2g -Xmx4g
一般情況下,StreamBase 用戶不需要為運行 Studio 調(diào)整Java虛擬機內(nèi)存設(shè)置。當(dāng) Studio 在同一臺機器上運行或調(diào)試應(yīng)用程序時,它會將 StreamBase Server 作為具有自己內(nèi)存設(shè)置的單獨 Java 進程啟動。
當(dāng) Studio 啟動應(yīng)用程序時,它會接受位于應(yīng)用程序項目文件夾根目錄下的名為服務(wù)器配置文件中的設(shè)置sbd.sbconf。(Studio 不使用其他名稱的配置文件,或放置在其他文件夾中的配置文件。)因此,sbd.sbconf只要有足夠的系統(tǒng)內(nèi)存(包括虛擬內(nèi)存)以支持啟動。
對于那些編輯具有數(shù)百個組件和許多子模塊的非常大的 StreamBase 應(yīng)用程序的人來說,存在一個例外。在這種情況下,更大的 Studio 內(nèi)存設(shè)置可以改善類型檢查時間和系統(tǒng)響應(yīng)時間。
通過STREAMBASE_STUDIO_VMARGS為 Studio 啟動的環(huán)境設(shè)置環(huán)境變量來調(diào)整 Studio 的 JVM 內(nèi)存設(shè)置。
STREAMBASE_STUDIO_VMARGS=-Xms1024M -Xmx2048M
驗證您的機器是否有足夠的系統(tǒng)內(nèi)存來支持同時編輯和啟動大型應(yīng)用程序。64 位 Windows 和 Linux 系統(tǒng)應(yīng)該有 4 GB 以利用大型 JVM 設(shè)置,建議使用更多。
更改 Studio JVM 內(nèi)存設(shè)置時請遵循以下規(guī)則:
您可以使用STREAMBASE_STUDIO_VMARGS環(huán)境變量來設(shè)置 Studio 的 Java 屬性及其 JVM 內(nèi)存設(shè)置,請記住在向變量添加屬性設(shè)置時始終指定內(nèi)存設(shè)置。這可能意味著重新指定默認(rèn)設(shè)置。
該-XX:MaxPermSize設(shè)置被 StreamBase 提供的 JDK 8 忽略。
-Xmx逐步提高設(shè)置,停下來測試結(jié)果。嘗試一次將 512M 添加到該-Xmx值,然后運行 ??Studio 以測試其響應(yīng)能力:
-Xms512M
-Xmx1024M
接下來,嘗試:
-Xms1024M
-Xmx1536M
等等。
在安裝了 8 GB RAM 的 64 位系統(tǒng)上運行 64 位 Studio 以編輯大型應(yīng)用程序時,請考慮以下設(shè)置:
-XX:+打印編譯
您可以配置 StreamBase Studio 以顯示其自己的 Java 堆內(nèi)存使用情況。運行Window → Preferences,選擇頂層General頁面,然后選中Show heap status復(fù)選框。此后,Studio 在狀態(tài)欄的最右側(cè)(位于 Studio 窗口的右下角)顯示當(dāng)前和最大保留堆內(nèi)存使用情況。
要對 StreamBase Server 的內(nèi)存使用情況進行診斷和故障排除,請考慮在jvm-args參數(shù)中添加這些附加設(shè)置。除非特別覆蓋,否則這些設(shè)置會導(dǎo)致向服務(wù)器控制臺(或 Studio 中的控制臺視圖)報告其他信息。
要查看有關(guān) Java 即時 (JIT) 編譯器 (HotSpot) 的信息,請嘗試添加:
STREAMBASE_STUDIO_VMARGS=-Xms1024M -Xmx4096M
如果 JVM 使用過多內(nèi)存,或者花費太多時間執(zhí)行垃圾收集,請嘗試添加此參數(shù)以獲取更具體的信息:
-詳細(xì):gc
有了這個參數(shù),JVM 會定期生成輸出,告訴您 Java 堆大小有多大以及在垃圾收集上花費了多少時間。Java 8 的垃圾收集子系統(tǒng)比早期版本有了很大改進,因此對于捆綁 JDK 8 的 StreamBase 版本 7.6.0 及更高版本,此設(shè)置可能不太必要。
如果為 StreamBase 運算符執(zhí)行生成的代碼不是最佳的,請嘗試添加-Xprof到 JVM 參數(shù)集。再次運行您的應(yīng)用程序,然后將生成的信息發(fā)送給您的 TIBCO StreamBase 代表。
您還可以使用 StreamBase 提供的或作為其 Java 安裝的一部分包含的以下工具來檢查內(nèi)存使用情況。這些工具按照應(yīng)用程序級別到 Java 對象級別檢查的順序列出。
使用StreamBase Manager或StreamBase Monitor查看應(yīng)用程序級內(nèi)存使用模式和實時隊列大小。
使用 StreamBase分析來查看操作員和隊列隨時間的變化。
使用 Java JConsole 實用程序查看 JVM 級內(nèi)存使用模式、實時對象和線程。
使用 Java jmap實用程序可以隨時查看堆上的 Java 對象。也可以使用Eclipse插件MAT(Memory Analyzer Tool)將jmap的輸出以圖形的形式展示出來。
使用 Java jstack實用程序可以隨時查看哪些Java線程在工作。