Điểm:0

Tại sao các quy trình java này không kết thúc khi cronjob đã được thực thi trong máy chủ AIX?

lá cờ vn

Tôi đã đặt crontab để thực thi dịch vụ java cứ sau 8 giờ trong hệ điều hành AIX(7.1). Khi crontab đã hoàn thành công việc, dịch vụ JAVA sẽ kết thúc. Cronjob này đang hoạt động bình thường. Nhưng dịch vụ java cuối cùng vẫn chưa đóng phiên của nó. Ngoài ra, dịch vụ java này mất 3-4 giờ để xử lý tệp.

Các phiên Java đang tích lũy từng ngày và cuối cùng dẫn đến việc máy chủ ứng dụng không hoạt động.

Phiên bản Java 1.8
AIX 7.1

Mục nhập crontab:

00 8 * * * cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log

Nếu tôi thực hiện câu lệnh trên theo cách thủ công, cronjob sẽ chạy đúng cách và đóng phiên ở cuối.

Tập tin RUN.sh:

/usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar 

Dưới đây là các phiên java vẫn đang chạy trong máy chủ ứng dụng. Xin hãy xem và tư vấn những gì tôi đang đi sai?

30932996 7340260 0 Ngày 25 tháng 3 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
31129600 29425670 21 ngày 30 tháng 3 - 2953:54 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
32505878 33620190 25 08:00:00 - 216:49 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
32833638 40304674 25 ngày 28 tháng 3 - 4183:00 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
33620190 7340260 0 08:00:00 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run. đăng nhập
33947736 7340260 0 ngày 04 tháng 4 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
34406468 35389628 22 Tháng Tư 03 - 965:58 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
34471988 7340260 0 Ngày 31 tháng 3 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
35389628 7340260 0 ngày 03 tháng 4 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
37290036 34471988 24 ngày 31 tháng 3 - 2444:53 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
38863052 7340260 0 ngày 02 tháng 4 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
39452824 30212288 30 ngày 26 tháng 3 - 5463:39 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
40304674 7340260 0 Ngày 28 tháng 3 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
41484458 7340260 0 ngày 01 tháng 4 - 0:00 sh -c cd /ibl/qnb/uat/app/adm/ADM_AUTOMATE_SERV && ./RUN.sh > /ibl/qnb/uat/logs/adm/ADM_AUTOMATE_SERV/run.log
43188280 23003326 27 ngày 22 tháng 3 - 8316:22 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46596146 20512790 29 ngày 27 tháng 3 - 4821:18 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46792934 27132138 26 ngày 24 tháng 3 - 6883:58 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46923976 30932996 26 ngày 25 tháng 3 - 6177:01 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar

Đánh giá cao thời gian và nỗ lực của bạn cho vấn đề này.

lá cờ fo
Cũng được hỏi tại https://stackoverflow.com/q/71757596/7552
AnujaDx avatar
lá cờ vn
@glennjackman Có, nhưng trong khi đó được đăng ở đây vì đây là cổng thông tin dành riêng cho linux.
lá cờ ae
Bạn có nhật ký mà bạn có thể chia sẻ? Điều gì xảy ra nếu bạn nắm bắt kết xuất chuỗi của các quy trình java đang chờ xử lý - nơi chúng bị kẹt? Bạn có thể thực hiện kết xuất chuỗi thông qua `jcmd` hoặc đơn giản `kill -3 ` (trong trường hợp này, nó sẽ được in trên thiết bị xuất chuẩn)
Jeff Schaller avatar
lá cờ nf
Tôi tự hỏi liệu ADM_AUTOMATE_SERV có đang dựa vào biến môi trường có trong trình bao tương tác của bạn chứ không phải trong trình bao không tương tác hay không. Hãy thử so sánh đầu ra của `env` từ trình bao tương tác của bạn với việc chạy nó từ `RUN.sh`.
lá cờ fo
@AnujaDx, thật khó chịu khi ai đó dành thời gian và công sức để trả lời trong một trang web để sau đó tìm thấy cùng một câu hỏi ở một trang web khác với nhiều nhận xét hơn và câu trả lời hay hơn. Trên một số trang web StackExchange, đăng chéo là cơ sở để đóng câu hỏi. Ít nhất bạn có thể tự liên kết hai câu hỏi.
Điểm:2
lá cờ ae

Lần đầu tiên tôi đưa ra nhận xét nhưng tôi nghĩ viết một câu trả lời thích hợp sẽ có ý nghĩa hơn.

Điều đầu tiên tôi sẽ kiểm tra là nhật ký: có điều gì có ý nghĩa trong chạy.log? (và có lẽ bạn có thể thêm vào tệp đó thay vì ghi đè lên mỗi khi công việc chạy)

Sau đó kiểm tra người dùng/nhóm mà quy trình đang chạy - nó có khác khi nó chạy từ cron so với khi bạn tự chạy nó không?

Một kỹ thuật rất hữu ích để tìm ra nơi ứng dụng Java/JVM bị kẹt là tạo một kết xuất chủ đề - có một số cách để làm điều đó:

  • công cụ yêu thích của tôi là jcmd - bạn chỉ có thể làm

    jcmd <pid> Thread.print > thread.$(date "+%F_%H-%M-%S").dump

  • một cách nhanh chóng khác là gửi tín hiệu SIGQUIT: giết -3 <pid>

    • trong trường hợp này, kết xuất luồng sẽ được in ra thiết bị xuất chuẩn của quy trình

Có kết xuất chuỗi, bạn có thể kiểm tra các chuỗi ứng dụng và xem chúng bị kẹt ở đâu.

Bạn cũng có thể thử bước đi để nắm bắt các cuộc gọi hệ thống do ứng dụng thực hiện - điều đó cũng có thể cho bạn biết ứng dụng đang làm gì.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.