jvm能识别什么字符集_识别JVM –比预期要难
jvm能識別什么字符集
在Plumbr,我們花費了上個月的時間來為將來的重大改進(jìn)奠定基礎(chǔ)。 此類構(gòu)件之一是為JVM添加唯一標(biāo)識符,以便將來自同一JVM的所有會話鏈接在一起。
盡管一開始似乎是一項瑣碎的任務(wù),但是當(dāng)查看JVM捆綁的jps命令的輸出時,圍繞該問題的復(fù)雜性開始令人頭疼,該命令列出了我的機器中當(dāng)前正在運行的所有Java進(jìn)程:
My Precious:tmp my$ jps 1277 start.jar 1318 Jps 1166上面列出了jps命令的輸出,列出了我的機器上當(dāng)前正在運行的所有Java進(jìn)程。 如果您不熟悉該工具,它將在左側(cè)列出所有進(jìn)程的進(jìn)程ID,并在右側(cè)列出所有進(jìn)程的名稱。 顯然,唯一一個以有意義的名稱列出自己的人就是jps本身。 另外兩個不太禮貌。 隱藏在start.jar首字母縮寫后面的是Jetty實例,而完全匿名的實際上是Eclipse。 我的意思是,真的– Java世界上最大的IDE甚至不愿意在標(biāo)準(zhǔn)Java工具中用名稱列出自己嗎?
因此,一眼了解內(nèi)置工具的最新技術(shù),就可以回顧一下我們當(dāng)前的要求。 我們當(dāng)前的解決方案是通過進(jìn)程ID +計算機名稱組合來標(biāo)識JVM。 這有一個明顯的缺點-每當(dāng)進(jìn)程死掉時,它的輪回就不會從內(nèi)核獲得相同的ID。 因此,每當(dāng)JVM Plumbr監(jiān)視的監(jiān)視重新啟動或終止時,我們都會失去跟蹤,無法將后續(xù)調(diào)用綁定在一起。 對于監(jiān)視工具來說,這顯然不是合理的行為,因此我們繼續(xù)尋找更好的解決方案。
接下來的明顯步驟是三個月前,當(dāng)時我們允許用戶通過-Dplumbr.application.name = my-precious-jvm啟動參數(shù)指定計算機的名稱。 看起來似乎很明智,但在這三個月中,只有2%的用戶實際上不愿意指定此參數(shù)。 因此,現(xiàn)在該回到繪圖板上,看看在嘗試將唯一且易于閱讀的標(biāo)識符自動綁定到JVM實例時,我們有哪些選擇。
我們的第一種方法是使用main()方法獲取類的名稱,并將其用作標(biāo)識符。 當(dāng)我們在包含四個不同的Jetty實例的開發(fā)箱中啟動構(gòu)建時,立即出現(xiàn)的弊端很快就會顯現(xiàn)出來–您立刻擁有四個不同的JVM,它們都在同一個不太唯一的標(biāo)識符下進(jìn)行綁定。
下一個嘗試是解析應(yīng)用程序的內(nèi)容并從部署描述符中識別應(yīng)用程序–畢竟, Plumbr監(jiān)視的大多數(shù)應(yīng)用程序都打包為WAR / EAR捆綁軟件,因此這將是有意義的,并使用捆綁軟件中的信息。 實際上,絕大多數(shù)工程師的確在web.xml或application.xml的<display-name>參數(shù)中給出了有意義的名稱。
這解決了部分問題–當(dāng)所有四個Jetty實例都運行具有不同<display-name>的應(yīng)用程序時,它們將顯示為唯一。 確實如此,直到我們的登臺環(huán)境表明情況并非總是如此。 我們在同一臺計算機上有多個不同的Plumbr Server實例,它們使用不同的應(yīng)用程序服務(wù)器,但是使用相同的<display-name>參數(shù)部署相同的WAR文件。 您可能會猜到,這再次扼殺了此類ID的唯一性。
另一個引起問題的事實是,有一些應(yīng)用程序服務(wù)器正在運行多個Web應(yīng)用程序-將多個WAR文件部署到容器中后會發(fā)生什么?
因此,我們不得不進(jìn)一步挖掘。 為了區(qū)分在同一臺機器上運行同一應(yīng)用程序的多個JVM,我們添加了啟動文件夾以保證標(biāo)識符的唯一性。 但是多次戰(zhàn)爭的問題仍然存在。 為此,我們回到了最初的假設(shè),即使用主類名稱作為標(biāo)識符。
還有一些技術(shù)上的細(xì)微差別,例如區(qū)分用于ID的實際哈希值和相同哈希值的用戶友好版本,現(xiàn)在,我們提供了一種解決方案,它將在您監(jiān)視的JVM列表中顯示類似的內(nèi)容:
| 青蒿素分期 | 自助服務(wù)(WAR) | 2014年7月7日11:45 |
| 青蒿素分期 | 網(wǎng)上商店(WAR) | 2014年8月7日18:30 |
| 芳綸 | com.ringbearer.BatchProcessor | 01.01.2001 00:00 |
因此,實際上,我們可以提出一個不錯的解決方案,并在其他所有方法均失敗的情況下使用-Dplumbr.application.name參數(shù)進(jìn)行手動命名。 仍然存在一個問題–為什么JVM工具和API完全缺少系統(tǒng)管理員通常需要的東西?
翻譯自: https://www.javacodegeeks.com/2014/07/identifying-jvm-trickier-than-expected.html
jvm能識別什么字符集
總結(jié)
以上是生活随笔為你收集整理的jvm能识别什么字符集_识别JVM –比预期要难的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDK 14中更好的NPE消息
- 下一篇: idf和adf_ADF:弹出窗口,对话框