Ubuntu中Java進程管理指南
在管理Java進程前,需先定位目標進程的PID(進程ID),常用命令如下:
ps -ef | grep java
,列出所有包含“java”的進程,輸出中第二列為PID;pgrep -af java
,直接顯示Java進程的PID及完整命令;jps
(JDK自帶),僅列出當前用戶啟動的Java進程及主類名;jps -v
可顯示詳細參數。獲取進程運行詳情及資源占用,可使用以下工具:
top
命令(按Shift+M
按內存排序,Shift+P
按CPU排序),或htop
(更友好的交互界面,需sudo apt install htop
安裝);jstat -gc <PID> 1000
(每秒刷新堆內存、垃圾回收情況)、jstack <PID> > thread_dump.txt
(導出線程棧信息,用于診斷死鎖)、jmap -dump:format=b,file=heapdump.hprof <PID>
(生成堆轉儲快照,分析內存泄漏)。根據場景選擇合適方式終止進程,優先使用溫和信號:
kill -SIGTERM <PID>
,發送SIGTERM信號,允許進程完成清理(如關閉數據庫連接、保存數據);kill -9 <PID>
(SIGKILL信號),立即終止進程但不保證資源釋放;ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
)。若Java應用需隨系統啟動/停止,建議配置為systemd服務:
/etc/systemd/system/
下新建.service
文件(如my-java-app.service
),內容示例:[Unit]
Description=My Java Application
After=network.target
[Service]
ExecStart=/usr/bin/java -jar /path/to/your-app.jar
Restart=always # 崩潰后自動重啟
User=ubuntu # 運行用戶
Group=ubuntu # 運行組
Environment="JAVA_OPTS=-Xms512m -Xmx1024m" # JVM參數
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
:重新加載服務配置;sudo systemctl start my-java-app
:啟動服務;sudo systemctl stop my-java-app
:停止服務;sudo systemctl status my-java-app
:查看服務狀態;sudo systemctl enable my-java-app
:設置開機自啟。持續監控進程狀態,及時發現性能瓶頸:
top
/htop
(實時資源占用)、jstat -gcutil <PID> 5000 10
(每5秒刷新一次GC情況,共10次)、jconsole
(圖形化監控JVM內存、線程、類加載);VisualVM
(集成jconsole、jstack等功能,支持遠程監控)、Prometheus+Grafana
(構建可視化監控面板,采集JMX指標)。有效管理Java應用日志,便于故障排查:
logrotate
工具(Ubuntu自帶),創建配置文件/etc/logrotate.d/my-java-app
,內容示例:/path/to/your/java/app/logs/*.log {
daily # 每天輪轉
rotate 7 # 保留7天
compress # 壓縮舊日志
missingok # 文件不存在不報錯
notifempty # 日志為空不輪轉
create 640 root adm # 新日志權限
}
ELK Stack
(Elasticsearch+Logstash+Kibana)收集、存儲、可視化日志;或journald
(systemd日志服務),通過journalctl -u my-java-app
查看應用日志。