ฉันใช้ps
คำสั่งLinux เพื่อตรวจสอบขนาด RSS ของกระบวนการจากภายในคอนเทนเนอร์ Docker หาก RSS ทั้งหมดสูงกว่าระดับที่กำหนดฉันจะไม่ทำการทดสอบและเริ่มมองหาการถดถอยของหน่วยความจำ
นี่คือps
ผลลัพธ์ทั้งหมดจากภายในคอนเทนเนอร์นักเทียบท่า
PID %CPU RSS Threads COMMAND
1 0.0 2616 1 sh /test/Build/unittest.sh
7 3.3 44240 1 /usr/bin/Xvfb :1 -screen 0 ...
17 1.5 10824 1 /usr/bin/fluxbox
357 690 6292244 324 java -server -Xmx2g ...
490 0.4 7852 1 /usr/bin/python /usr/bin/dstat ...
491 0.7 7812 1 /usr/bin/python /usr/bin/dstat ...
1331 0.0 3040 1 /usr/bin/ps -AHww --format ...
1332 0.0 380 1 /usr/bin/ls --all ...
1333 0.0 6292248 1 [NDR-347]
กระบวนการ Java (pid: 357) สร้างกระบวนการลูกที่มีอายุสั้น ในเอาต์พุตข้างต้นคุณสามารถดูกระบวนการ Python 2 dstat, ps, ls และ [NDR-347] "สิ่งเหล่านี้สร้างขึ้นโดยกระบวนการ Java
บางครั้งฉันเห็นกระบวนการลูกที่ซ้ำกัน (เช่นคำสั่งเดียวกัน) แต่รหัสกระบวนการที่แตกต่างกัน (ไม่แสดง) เหตุใดฉันจึงเห็นกระบวนการลูกที่ซ้ำกัน ฉันคิดว่านี่เป็นสิ่งประดิษฐ์ Linux หรือ Docker สิ่งประดิษฐ์นั้นคืออะไร?
ฉันได้รับการตรวจสอบps
ผลลัพธ์มานานกว่าหนึ่งปีแล้ว เป็นครั้งแรกที่ฉันเห็นกระบวนการพิเศษ "[NDR-347]" (pid: 1333) ด้วย RSS เกือบเหมือนกัน กระบวนการ Java (pid: 357) ตั้งชื่อเธรด "NDR- #" ดังนั้นฉันจึงพบว่าแปลกที่คำสั่งของกระบวนการลูกจะเป็นชื่อของเธรดจากกระบวนการ Java กระบวนการพิเศษสองเท่าของ RSS และก่อให้เกิดปัญหา ปัญหาไม่สามารถทำซ้ำได้ นี้แสดงให้เห็นว่าฉันว่า pid 1333 เป็นอย่างมากช่วงสั้น ๆ ps
และไม่ได้มีการจับโดย RSS ทั้งหมดคือ 12.07 GB และไม่มีกระบวนการพิเศษคือ 6.07 GB กระบวนการพิเศษนี้คืออะไร? ทำไมถึงมี RSS ขนาดใหญ่เช่นนี้?
แก้ไข: ps
คำสั่งที่แน่นอนคือ ...
ps -Ahww --format pid,%cpu,rss:8,nlwp=Threads,command
fork
และexecve
อาจยืดเยื้อดังนั้นเมื่อฉันมีแนวโน้มที่จะเห็นสิ่งนี้มากขึ้น