生成Java線程轉儲而不重新啟動。
這是我們以編程方式進行的操作:http ://pastebin.com/uS5jYpd4
我們使用JMXThreadMXBean和ThreadInfo類:
ThreadMXBean mxBean = ManagementFactory.getThreadMXBean();ThreadInfo[] threadInfos = mxBean.getThreadInfo(mxBean.getAllThreadIds(), 0);...
您也可以kill -QUIT pid在?unix下進行操作以將堆棧轉儲到標準輸出中。還有jstack來轉儲JVM的堆棧。
我們還具有一個自動化功能,如果應用程序的平均負載高于某個閾值,則該功能將轉儲堆棧:
private long lastcpuTimeMillis;private long lastPollTimeMillis;public void checkLoadAverage() { long Now = System.currentTimeMillis(); long currentcpuMillis = getTotalcpuTimeMillis(); double loadAvg = calcLoadAveragePercentage(Now, currentcpuMillis); if (loadAvg > LOAD_AVERAGE_DUMP_THRESHOLD) {try { dumpStack('Load average percentage is ' + loadAvg);} catch (IOException e) { // Oh well, we tried} } lastcpuTimeMillis = currentcpuMillis; lastPollTimeMillis = Now;}private long getTotalcpuTimeMillis() { long total = 0; for (long id : threadMxBean.getAllThreadIds()) {long cpuTime = threadMxBean.getThreadcpuTime(id);if (cpuTime > 0) { total += cpuTime;} } // since is in nano-seconds long currentcpuMillis = total / 1000000; return currentcpuMillis;}private double calcLoadAveragePercentage(long Now, long currentcpuMillis) { long timeDiff = Now - lastPollTimeMillis; if (timeDiff == 0) {timeDiff = 1; } long cpuDiff = currentcpuMillis - lastcpuTimeMillis; double loadAvg = (double) cpuDiff / (double) timeDiff; return loadAvg;}解決方法
我想創建一個跟蹤內存使用情況和cpu使用情況的線程。
如果應用程序達到較高級別,我想生成一個堆轉儲或線程轉儲。
有沒有一種方法可以生成線程轉儲運行時而無需重新啟動?
相關文章:
1. javascript - git clone 下來的項目 想在本地運行 npm run install 報錯2. python - django 里自定義的 login 方法,如何使用 login_required()3. python如何不改動文件的情況下修改文件的 修改日期4. mysql主從 - 請教下mysql 主動-被動模式的雙主配置 和 主從配置在應用上有什么區別?5. angular.js - 不適用其他構建工具,怎么搭建angular1項目6. 主從備份 - 跪求mysql 高可用主從方案7. android-studio - Android 動態壁紙LayoutParams問題8. mysql優化 - mysql count(id)查詢速度如何優化?9. node.js - 使用 superagent 抓取 UTF-8網站亂碼10. sql語句如何按or排序取出記錄
