我們的 Linux 服務器(其中 1500 臺)安裝了多個 Java 版本(從 Java 1.5 到 Java 17),我們正在清理它。有沒有辦法找出實際使用了哪些已安裝的版本?
我們可以在任何時候對正在運行的行程進行快照,但這會錯過該行程,該行程會出現一秒鐘并停止運行。
無論如何,為了自動捕獲這些資料,我們可以選擇運行 ansible playbook 等。
任何建議將不勝感激。
uj5u.com熱心網友回復:
蠻力解決方案(將包括停機時間和大量作業):
- 準備所有已安裝服務的檔案,創建或獲取它
- 洗掉或禁用所有版本的 Java
- 啟動一項又一項服務
- 記錄所有發生的錯誤
- 在檔案中填寫每個服務所需的Java版本(可能你可以通過日志找到什么服務需要哪個Java版本)
- 一次重新安裝或啟用一個 Java 版本 - 可能最適合您剛剛嘗試再次啟動的服務
對所有服務/java 版本重復此操作。
對于未來:記錄在您的服務器上運行的服務以及它們具有哪些依賴項。
uj5u.com熱心網友回復:
這是一個可能適合您的 bash 腳本:
#!/bin/bash
while true
do
ps -aux | grep java | awk '{print $2}' | xargs -I{} lsof -p {} | grep ' txt ' | awk '{print $9}' >> log
sort -u log > sorter
cat sorter > log
sleep .2
done
每 200 毫秒,它會將每個當前正在運行的行程的行程 ID 作為引數提供給 list-open-files 實用程式,過濾該串列以僅包含可執行檔案(“txt”),并將其附加到一個名為 log 的檔案。然后它將該檔案中的唯一字串寫入名為 sorter 的檔案,然后將其寫回日志檔案。
在腳本運行時,我使用兩個不同的 jvm 執行了幾次簡單的 java 控制臺應用程式,這是日志檔案的內容:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
uj5u.com熱心網友回復:
運行 ansible playbook 并將輸出捕獲到 Excel 作業表將是一個很好的起點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432458.html
