2015-03-09 23 views
7

Có thể truy xuất thời gian bắt đầu của một chuỗi java đã cho trong JVM không?Thời gian bắt đầu của chuỗi Java

Tôi có một chuỗi kết xuất và đang xem xét một số chủ đề có vấn đề mà tôi muốn tương quan với một hoạt động cụ thể trong nhật ký ứng dụng bằng cách sử dụng thời gian.

Trả lời

1

Có, có thể nếu bạn đang chạy Oracle JDK/OpenJDK trên Linux.

Ý tưởng là tìm id chuỗi gốc (TID) và sau đó xem thời gian sửa đổi của /proc/JAVA_PID/task/TID tệp giả.

Nếu bạn có một Dump Thread, thì điều này là tầm thường: id chủ đề gốc sẽ được in bởi tiêu đề chuỗi.

Ví dụ, quá trình Java PID là 2086. Bạn có loại

$ jstack 2086 

và có được một stack trace với các chủ đề sau đây quan tâm:

"Thread-26" prio=10 tid=0x00007f96c80c2800 nid=0x86a waiting on condition [0x00007f96c0ff2000] 
    java.lang.Thread.State: TIMED_WAITING (sleeping) 

đâu nid=0x86a là thread ID bản địa. 0x86a = 2154, do đó, bạn muốn khám phá nhiệm vụ năm 2154 của quá trình 2086:

$ ls -ld /proc/2086/task/2154 
dr-xr-xr-x 6 user user 0 Mar 10 23:12 /proc/2086/task/2154 
         ^^^^^^^^^^^^ 
         the thread start time 
+0

Cảm ơn bạn đã nhập. Tôi không hoàn toàn hiểu được lời giải thích. Tôi có một bãi chứa thread. Có một tập tin pseude TID cho mỗi chủ đề? Nếu bạn có thể cung cấp một ví dụ, điều đó thật tuyệt vời. –

+0

@bobdabelina Tôi đã cập nhật câu trả lời bằng một ví dụ. – apangin

+0

Cảm ơn rất nhiều. Điều này rất hữu ích. –

4

Không có phương pháp nào trong API Java cung cấp cho bạn thông tin này. Bên cạnh đó, nó có thể không được hữu ích anyways. Hãy xem xét trường hợp của một hồ bơi thread nơi tạo thread không nhất thiết phải gắn liền với các sự kiện cấp ứng dụng.

Nếu bạn có toàn quyền kiểm soát việc tạo chuỗi, thì bạn có thể đính kèm biến chủ đề cục bộ vào chuỗi ghi lại thời gian tạo của nó.

+0

Cảm ơn bạn đã trả lời. Tôi tin rằng các chủ đề này đang được gọi bởi các yêu cầu của người dùng. Thật không may, tôi không có khả năng sửa đổi mã tại thời điểm này và phải làm việc với bất cứ điều gì đang chạy trên sản xuất hiện nay. –

+0

Chúng được tạo bởi vùng chứa (ví dụ: Máy chủ ứng dụng) hay mã ứng dụng của bạn đang tạo chúng? – amahfouz

+0

Chúng được tạo bởi vùng chứa. –

0

hãy thử sử dụng "ps -p $ pid -wLo lwp, lstart"

Các vấn đề liên quan