Tôi muốn hỏi liệu có một số cách đơn giản để xác định mức sử dụng cpu cho mỗi luồng trong java. Cảm ơnGiám sát việc sử dụng CPU trên mỗi luồng trong java?
Trả lời
Mặc dù điều này phụ thuộc vào nền tảng, tôi tin rằng những gì bạn đang tìm kiếm là ThreadMXBean: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ThreadMXBean.html. Bạn có thể sử dụng phương thức getThreadUserTime, ví dụ, để có được những gì bạn cần. Để kiểm tra xem nền tảng của bạn có hỗ trợ đo CPU hay không, bạn có thể gọi isThreadCpuTimeSupported().
Tôi tin rằng JConsole (archived link) không cung cấp loại thông tin này thông qua một plugin
Nó sử dụng ThreadMXBean getThreadCpuTime() chức năng.
Something dọc theo dòng:
long upTime = runtimeProxy.getUptime();
List<Long> threadCpuTime = new ArrayList<Long>();
for (int i = 0; i < threadIds.size(); i++) {
long threadId = threadIds.get(i);
if (threadId != -1) {
threadCpuTime.add(threadProxy.getThreadCpuTime(threadId));
} else {
threadCpuTime.add(0L);
}
}
int nCPUs = osProxy.getAvailableProcessors();
List<Float> cpuUsageList = new ArrayList<Float>();
if (prevUpTime > 0L && upTime > prevUpTime) {
// elapsedTime is in ms
long elapsedTime = upTime - prevUpTime;
for (int i = 0; i < threadIds.size(); i++) {
// elapsedCpu is in ns
long elapsedCpu = threadCpuTime.get(i) - prevThreadCpuTime.get(i);
// cpuUsage could go higher than 100% because elapsedTime
// and elapsedCpu are not fetched simultaneously. Limit to
// 99% to avoid Chart showing a scale from 0% to 200%.
float cpuUsage = Math.min(99F, elapsedCpu/(elapsedTime * 1000000F * nCPUs));
cpuUsageList.add(cpuUsage);
}
}
bằng cách sử dụng java.lang.management.ThreadMXBean. Làm thế nào để có được một ThreadMXBean:
ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
sau đó bạn có thể truy vấn bao nhiêu a thread cụ thể được tiêu thụ bằng cách sử dụng:
long cpuTime = tmxb.getThreadCpuTime(aThreadID);
Hy vọng nó giúp.
Thực tế đối tượng ThreadMXBean cung cấp chức năng bạn cần (tuy nhiên nó có thể không được thực hiện trên tất cả các máy ảo).
Trong JDK 1.5 có một chương trình demo thực hiện chính xác những gì bạn cần. Đó là trong thư mục demo/quản lý và nó được gọi là JTop.java
Thật không may, nó không có trong Java6. Có lẽ bạn có thể tìm thấy tại với google hoặc tải về JDK5.
Hãy thử plugin JConsole "TopThreads". Xem http://lsd.luminis.nl/top-threads-plugin-for-jconsole/
Liên kết đã bị hỏng, https://arnhem.luminis.eu/new_version_topthreads_jconsole_plugin/ – Joost
Option_1: Trình độ Mã
Trong mã logic kinh doanh của bạn; trong API bắt đầu cuộc gọi start() và trong chặn cuộc gọi chặn cuối cùng(). Vì vậy, bạn sẽ nhận được thời gian CPU để thực thi logic của bạn theo luồng đang chạy. Sau đó đăng nhập. Reference.
class CPUTimer
{
private long _startTime = 0l;
public void start()
{
_startTime = getCpuTimeInMillis();
}
public long stop()
{
long result = (getCpuTimeInMillis() - _startTime);
_startTime = 0l;
return result;
}
public boolean isRunning()
{
return _startTime != 0l;
}
/** thread CPU time in milliseconds. */
private long getCpuTimeInMillis()
{
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
return bean.isCurrentThreadCpuTimeSupported() ? bean.getCurrentThreadCpuTime()/1000000: 0L;
}
}
Option_2: Trình độ Màn hình sử dụng plugin (AIX của IBM hộp mà không có hỗ trợ jvisualvm)
Nếu bạn nghĩ rằng đó là sự chậm trễ trong cách thêm mã bây giờ, sau đó bạn có thể thích JConsole với hỗ trợ plugin. Tôi đã theo dõi this bài viết. Tải topthreads jar từ bài viết đó và chạy ./jconsole -pluginpath topthreads-1.1.jar
Option_3: Màn trình độ sử dụng TOP (shift H) + jstack (máy Unix trong đó có hỗ trợ 'shif + H')
Thực hiện theo this hướng dẫn, nơi lệnh trên cùng sẽ cung cấp tùy chọn để tìm chuỗi CPU trên cùng (nid).Hãy kiểm tra rằng nid trong tập tin đầu ra jstack.
- 1. Giám sát nhiệt độ CPU
- 2. cách giám sát việc sử dụng CPU của tập lệnh PHP
- 3. Java - Làm cách nào để giám sát việc sử dụng Bộ nhớ và CPU của quá trình khác
- 4. Redis - giám sát việc sử dụng bộ nhớ
- 5. Giám sát việc sử dụng mạng của quá trình?
- 6. Giám sát ZooKeeper với Giám sát
- 7. Giám sát việc sử dụng thẻ đồ họa
- 8. Giám sát PHP/Curl sử dụng Fiddler
- 9. Giám sát nhiều ứng dụng đường ray
- 10. Giám sát ứng dụng virtualenv django qua người giám sát
- 11. Làm thế nào để giám sát việc sử dụng bộ nhớ trên Heroku (Node.js)
- 12. Giám sát máy chủ đơn giản với Java
- 13. Giám sát
- 14. Giám sát các ứng dụng .NET ASP.NET
- 15. Giám sát JMX bằng cách sử dụng Zabbix
- 16. Đa luồng Java trong tải CPU
- 17. Giám sát USB OSX
- 18. Giám sát ngoại lệ gevent trong công việc
- 19. Giám sát viên Akka tùy chỉnh cơ bản trong Java
- 20. Giám sát lưu lượng mạng
- 21. Giám sát các ứng dụng dựa trên web sản xuất
- 22. Giám sát celerybeat với người giám sát và virtualenv
- 23. Java giảm sử dụng CPU
- 24. giám sát với chọn
- 25. giám sát thư mục
- 26. Giám sát IIS 6.0
- 27. giám sát thay đổi tập tin c + + linux
- 28. Làm thế nào để giám sát quá trình trong CPU Linux, Bộ nhớ và thời gian
- 29. Howto Giám sát một số ứng dụng web (với JMX) trên máy chủ Tomcat?
- 30. Sử dụng CPU cho mỗi ứng dụng trong android
Chỉ cần lưu ý, bạn cũng có thể muốn kiểm tra xem CpuTime có được bật trong JVM mà bạn đang chạy hay không. 'threadBean_.isThreadCpuTimeEnabled()' sẽ trả về giá trị boolean và bạn luôn có thể đặt nó nếu nó không có 'threadBean_.setThreadCpuTimeEnabled (true)' – Graham