Score:0

เหตุใดกระบวนการจาวานี้จึงไม่สิ้นสุดเมื่อ cronjob ดำเนินการในเซิร์ฟเวอร์ AIX

ธง vn

ฉันได้ตั้งค่า crontab เพื่อเรียกใช้บริการจาวาในทุก ๆ 8 ชั่วโมงในระบบปฏิบัติการ AIX (7.1) เมื่อ crontab ทำงานเสร็จแล้ว บริการ JAVA ก็ควรจะสิ้นสุดลง cronjob นี้ทำงานอย่างถูกต้อง แต่บริการจาวาไม่ได้ปิดเซสชันในตอนท้าย บริการจาวานี้ใช้เวลา 3-4 ชั่วโมงในการประมวลผลไฟล์

เซสชัน Java กำลังสะสมวันแล้ววันเล่า และในที่สุดจะทำให้แอ็พพลิเคชันเซิร์ฟเวอร์ไม่ได้ใช้งาน

จาวาเวอร์ชัน 1.8
AIX 7.1

รายการ Crontab:

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

หากฉันดำเนินการตามคำสั่งด้านบนด้วยตนเอง cronjob จะทำงานอย่างถูกต้องและปิดเซสชันในตอนท้าย

ไฟล์ RUN.sh:

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

ด้านล่างนี้คือเซสชันจาวาที่ยังคงทำงานในเซิร์ฟเวอร์แอปพลิเคชัน กรุณาดูและแนะนำสิ่งที่ฉันจะผิด?

30932996 7340260 0 25 มี.ค. - 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 มี.ค. 30 - 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 28 มี.ค. - 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 บันทึก
33947736 7340260 0 เม.ย. 47 - 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 เม.ย. 46 - 965:58 น. /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
34471988 7340260 0 31 มี.ค. - 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 เม.ย. 46 - 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 มี.ค. 31 - 2444:53 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
38863052 7340260 0 เม.ย. 45 - 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 มี.ค. 26 - 5463:39 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
40304674 7340260 0 28 มี.ค. - 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 เม.ย. 44 - 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 มี.ค. 22 - 8316:22 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46596146 20512790 29 มี.ค. 27 - 4821:18 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46792934 27132138 26 มี.ค. 24 - 6883:58 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar
46923976 30932996 26 มี.ค. 25 - 6177:01 /usr/java8_64/bin/java -Xmx1024m -jar ADM_AUTOMATE_SERV.jar

ขอขอบคุณที่สละเวลาและความพยายามของคุณในเรื่องนี้

fo flag
ถามได้ที่ https://stackoverflow.com/q/71757596/7552
AnujaDx avatar
vn flag
@glennjackman ใช่ แต่ในขณะเดียวกันก็โพสต์ที่นี่เนื่องจากนี่คือพอร์ทัลเฉพาะของ linux
ae flag
คุณมีบันทึกที่คุณสามารถแบ่งปันได้หรือไม่? จะเกิดอะไรขึ้นหากคุณจับภาพเธรดดัมพ์ของกระบวนการจาวาที่ค้างอยู่ - กระบวนการเหล่านั้นติดอยู่ที่ใด คุณสามารถดัมพ์เธรดผ่าน `jcmd` หรือ `kill -3 อย่างง่าย ` (ในกรณีนี้ จะพิมพ์บน stdout)
Jeff Schaller avatar
nf flag
ฉันสงสัยว่า ADM_AUTOMATE_SERV อาศัยตัวแปรสภาพแวดล้อมที่มีอยู่ในเชลล์แบบโต้ตอบของคุณหรือไม่ แต่ไม่ได้อยู่ในเชลล์ที่ไม่ใช่แบบโต้ตอบ ลองเปรียบเทียบผลลัพธ์ของ `env` จากเชลล์โต้ตอบของคุณกับการเรียกใช้จาก `RUN.sh`
fo flag
@AnujaDx อาจเป็นเรื่องน่าหงุดหงิดเพราะคนที่ให้เวลาและความพยายามในการตอบในไซต์เดียว แล้วพบคำถามเดียวกันในไซต์อื่นในภายหลังซึ่งมีความคิดเห็นมากกว่าและคำตอบที่ดีกว่า ในบางไซต์ StackExchange การโพสต์ข้ามถือเป็นเหตุผลในการปิดคำถาม อย่างน้อยคุณก็สามารถเชื่อมโยงคำถามสองข้อได้ด้วยตัวเอง
Score:2
ธง ae

ฉันแสดงความคิดเห็นเป็นครั้งแรก แต่ฉันคิดว่าการเขียนคำตอบที่เหมาะสมจะมีความหมายมากกว่า

สิ่งแรกที่ฉันจะตรวจสอบคือบันทึก: มีอะไรที่มีความหมายหรือไม่ run.log? (และบางทีคุณอาจผนวกไฟล์นั้นแทนการเขียนทับทุกครั้งที่ทำงาน)

จากนั้นตรวจสอบผู้ใช้/กลุ่มที่กระบวนการทำงานอยู่ - เวลาเรียกใช้จาก cron แตกต่างจากที่คุณเรียกใช้เองหรือไม่

เทคนิคที่มีประโยชน์มากในการหาจุดที่แอป Java/JVM ติดขัดคือการสร้าง ทิ้งด้าย - มีหลายวิธีในการทำ:

  • เครื่องมือที่ฉันชอบคือ jcmd - คุณก็ทำได้

    jcmd <pid> Thread.print > thread.$(วันที่ "+%F_%H-%M-%S").dump

  • อีกวิธีที่รวดเร็วคือการส่งสัญญาณ SIGQUIT: ฆ่า -3 <pid>

    • ในกรณีนี้ เธรดดัมพ์จะถูกพิมพ์ไปที่ stdout ของกระบวนการ

การมีเธรดดัมพ์ คุณสามารถตรวจสอบเธรดของแอปพลิเคชันและดูว่าติดขัดตรงไหน

คุณยังสามารถลอง สเตรส เพื่อบันทึกการเรียกของระบบจากแอป ซึ่งสามารถบอกคุณได้ว่ากำลังทำอะไรอยู่

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา