วิธีการตรวจสอบและบันทึกการใช้หน่วยความจำ / cpu ของกระบวนการเมื่อเวลาผ่านไป? [ปิด]


30

ฉันกำลังมองหาวิธีในการวินิจฉัยปัญหาเช่นการตายของ swap ซึ่งกระบวนการหน่วยความจำแบบ balooning เติม swap และฆ่าเครื่องทั้งหมด (เช่น apache)

ฉันใช้ cacti อยู่แล้วและฉันสามารถตั้งค่า nagios (แม้ว่าจะไม่ใช่) หรือ munin แต่เท่าที่ฉันสามารถบอกได้ว่าพวกเขาไม่สามารถบันทึกการใช้งานโปรแกรมแต่ละรายการ - เพียงสถานะโดยรวม

ฉันรู้ว่าฉันสามารถม้วนสคริปต์ที่ >> ไปยังไฟล์บางไฟล์ได้ทุก ๆ 30s แต่ฉันต้องการดูว่ามีโซลูชันที่มีอยู่แล้วหรือไม่

มันจะเป็นการดีที่:

  • บันทึกการใช้หน่วยความจำของกระบวนการทุก N วินาที
  • การใช้ CPU ของกระบวนการบันทึกทุก ๆ N วินาที
  • สนับสนุนแผนภูมิและประวัติ
  • สนับสนุนค่าเฉลี่ย - เช่น mysqld ใช้ CPU 43% ในวันสุดท้ายและหน่วยความจำเฉลี่ย 400MB
  • เป็นอิสระและโอเพนซอร์ส

ชื่อกระบวนการไม่ได้และไม่ควรทราบล่วงหน้า - ความคิดคือการปล่อยให้มันตรวจสอบแล้วดูที่ผู้กระทำผิดด้านบน

ระบบของฉันคือ Linux (OpenSUSE)


คุณต้องการตรวจสอบกระบวนการใด ๆที่อาจมีหน่วยความจำรั่ว (Hogs หน่วยความจำด้านบนสุด) หรือคุณต้องการตรวจสอบชุดกระบวนการที่กำหนดไว้ (เช่น Apache webserver และกระบวนการ Tomcat) หลังสามารถทำได้ด้วยปลั๊กอิน Nagios หรือ Cacti ง่ายๆ อดีตนั้นยากกว่า คุณควรชี้แจงเรื่องนี้
Stefan Lasiewski

ฉันชี้แจงไปแล้วในโพสต์ แต่จะชี้แจงอีกครั้ง: ฉันต้องการทราบสถานะของระบบเมื่อมันลงเนื่องจากการตายสลับ ฉันต้องการที่จะรู้ว่าใครเป็นผู้กระทำผิดที่เลวร้ายที่สุด และ btw ก็ไม่จำเป็นต้องมีหน่วยความจำรั่วไหล - เพียงแค่การไหลของการจราจรหรือสิ่งที่ทำให้เกิดการใช้งานหน่วยความจำสูง ดังนั้นไม่ควรกำหนดค่าความรู้ล่วงหน้าของชื่อไบนารี
Artem Russakovskii

เป็นไปได้ซ้ำกัน - serverfault.com/questions/67234/…
warren

วอร์เรนนั่นเป็นคำถามที่แตกต่างอย่างสิ้นเชิง
Artem Russakovskii

8
การปิดโพสต์ที่มีคุณภาพดีนั้นเป็นสิ่งที่ไม่ดีโดยเฉพาะอย่างยิ่งหลังจาก 4 ปีย้อนหลัง
peterh กล่าวว่าคืนสถานะโมนิก้า

คำตอบ:


16

คุณต้องการแค่ผู้กระทำผิดอันดับต้น ๆ พิจารณาใช้topกับช่วงเวลาที่ค่อนข้างนาน (60 วินาทีบวก) ในโหมดแบทช์ คุณอาจต้องใช้มากกว่าหนึ่งการtopทำงานเพื่อจับผู้กระทำความผิดอันดับต้น ๆ ในหลาย ๆ ทรัพยากร ฉันได้กำหนดค่าระบบให้ทำงานtopสองสามรอบเมื่อทรัพยากรถูกใช้งานเกิน

พิจารณาทำงานsarในโหมดแบทช์เพื่อจับการใช้ทรัพยากร ฉันตระหนักว่านี่เป็นเซิร์ฟเวอร์ แต่มีประโยชน์ในการกำหนดเวลาที่เกิดปัญหา

เรียกใช้muninและเปิดใช้งานการแจ้งเตือน สิ่งนี้อาจทำให้คุณมีโอกาสได้เข้ามาและเฝ้าดูเซิร์ฟเวอร์หยุดทำงาน คุณอาจสามารถแก้ไขปัญหาก่อนที่จะลง

สำหรับการรั่วไหลของหน่วยความจำการใช้ swap เพิ่มขึ้นอย่างต่อเนื่องบ่งชี้ถึงปัญหา ฉันเคยดูเซิร์ฟเวอร์ช้าลงในช่วงเวลาหนึ่งวัน บริการปัญหาคือโปรแกรมตรวจสอบกระบวนการอื่น ๆ สำหรับหน่วยความจำรั่ว ผู้ดูแลระบบยืนยันว่าการใช้งาน swap ที่เพิ่มขึ้นนั้นไม่เกิดปัญหาขึ้นจนกระทั่งเซิร์ฟเวอร์หยุดตอบสนอง

คุณอาจพบว่าcfengineสามารถใช้การตรวจจับความผิดปกติเพื่อเรียกใช้สคริปต์เพื่อดักจับสถานะของระบบเมื่อเกิดสิ่งผิดปกติ คุณอาจต้องการข้อมูลจำนวนมากนอกเหนือจากกระบวนการที่ใช้ทรัพยากรส่วนใหญ่ สำหรับการใช้งานอย่างฉับพลันคุณอาจต้องการรายการการเชื่อมต่อเครือข่าย (ตามที่อยู่ไม่ใช่ชื่อ) การใช้หน่วยความจำก็มีประโยชน์เช่นกัน


12

sysstatนั้นถูกสร้างขึ้นมาเพื่อวัตถุประสงค์ของคุณอย่างแท้จริง


นี่คือที่ที่คุณควรเริ่ม คุณไม่สามารถรู้ได้ว่าจะเริ่มสอบที่ไหนจนกว่าคุณจะรู้ว่าคุณมีโอกาสที่ดีที่สุด Sysstat คือสิ่งที่คุณกำลังมองหา (มีกราฟสวย ๆ ) เมื่อคุณรู้เพิ่มเติมให้ใช้ systemtap
อัลเลน

9

ฉันเคยใช้บนยอดก่อน:

http://freshmeat.net/projects/atop/

"Atop เป็นเครื่องตรวจสอบประสิทธิภาพเต็มหน้าจอ ASCII ที่สามารถรายงานกิจกรรมของกระบวนการทั้งหมด (แม้ว่ากระบวนการเสร็จสิ้นในช่วงเวลา) การบันทึกประจำวันของระบบและกิจกรรมกระบวนการสำหรับการวิเคราะห์ระยะยาวโดยเน้นการใช้ทรัพยากรระบบมากเกินไปโดยใช้ สี ฯลฯ ในช่วงเวลาปกติจะแสดงกิจกรรมระดับระบบที่เกี่ยวข้องกับ CPU, หน่วยความจำ, swap, ดิสก์และเลเยอร์เครือข่ายและสำหรับทุกกระบวนการที่ใช้งานจะแสดงการใช้งาน CPU การเติบโตของหน่วยความจำลำดับความสำคัญชื่อผู้ใช้สถานะ และรหัสออก "


บนยอดดูเหมือนจะไม่มีรายงานที่จะให้สิ่งที่ฉันต้องการ โปรดแก้ไขฉันหากฉันผิด
Artem Russakovskii

จะดูแลสัญลักษณ์แสดงหัวข้อย่อยสองแห่งแรกของคุณ คุณสามารถใช้ห้องสมุดเพื่อรวบรวมสถิติเหล่านี้แล้วทำประวัติ / กราฟของคุณตามข้อมูล
NinjaCat

4
@ artem-russakovskii - โดยค่าเริ่มต้น atop จะบันทึกข้อมูลไปยังไฟล์ทุกสิบนาที หากเซิร์ฟเวอร์ของคุณเกิดข้อผิดพลาดที่ 3:45 คุณสามารถเริ่มต้นได้ด้วยการatop -r log_filenameกดmเพื่อสลับไปยังมุมมองการใช้งานหน่วยความจำต่อกระบวนการจากนั้นกดtเพื่อเลื่อนไปข้างหน้าโดยเพิ่มขึ้นทีละ 10 นาทีจนกระทั่ง 3:40 คุณสามารถอ่านเพิ่มเติมเกี่ยวกับพื้นฐานการใช้งาน atop ได้ที่lwn.net/Articles/387202และดูตัวอย่างของการระบุการรั่วไหลของหน่วยความจำที่atoptool.nl/download/case_leakage.pdf
sciurus

6

คุณได้ลอง collectd?
มันทรงพลังและปรับแต่งได้มาก
มีปลั๊กอินจำนวนมากและสามารถรวมเข้ากับ nagios ได้

http://collectd.org/features.shtml


Collectd มีน้ำหนักเบามากไม่ยากเกินไปในการตั้งค่าและจะช่วยให้คุณเห็นการเติบโตของหน่วยความจำ / การแลกเปลี่ยนเมื่อเวลาผ่านไป มันจะไม่ระบุกระบวนการที่กระทำผิดแม้ว่า - topแต่บางทีคุณอาจจะสามารถที่จะแจ้งให้ทราบและจับการเจริญเติบโตของหน่วยความจำในเวลาและตรวจสอบสถานการณ์ด้วยตนเอง
Marius Gedminas

1
ฉันต้องบอกว่าฉันไม่ได้ลองปลั๊กอินนั้น แต่อ่านจากคู่มือของปลั๊กอินกระบวนการของ collectd: "ถ้ากระบวนการถูกเลือกข้อมูลต่อไปนี้จะถูกรวบรวมข้อมูลทั้งหมดนี้จะถูกรวบรวมโดยชื่อกระบวนการขนาดส่วนที่อยู่อาศัย ใช้ผู้ใช้และเวลาระบบจำนวนกระบวนการตามชื่อนั้นจำนวนเธรด (สรุปกระบวนการทั้งหมด) จำนวนข้อบกพร่องของหน้าหลักและหน้ารองหมายเลข I / O หยาบ (จำนวนไบต์ที่เขียนและอ่านเนื่องจาก ไปที่ syscalls ตามขั้นตอน)
PiL

คุณสามารถเลือกกระบวนการหรือตามชื่อหรือโดย regex
PiL

2

Centreon อยู่ด้านบนของ Nagios, Nagios ควบคู่กับ NRPE จากนั้นคุณสามารถเขียนสคริปต์ที่กำหนดเองเพื่อรายงานข้อมูลในรูปแบบใดก็ได้ที่คุณต้องการใช้กับ NRPE จากนั้น Nagios สำรวจข้อมูลจากเซิร์ฟเวอร์ระยะไกลด้วย NRPE และ Centreon จะสร้างกราฟที่สวยงามและเพิ่มความยืดหยุ่นให้กับผู้ใช้เป็นจำนวนมาก เราใช้งานได้มากกว่าที่http://beyondhosting.net ฉันมีเทมเพลต VZ Container พร้อม centreon + nagios setup ถ้าคุณต้องการ

กราฟ centreon สร้าง hostthenpost.org/tyler/2010-07-23_1719.png


ฉันต้องการทางออกที่พร้อมสำหรับการรายงานสิ่งที่ฉันพูดถึงกระบวนการที่สำคัญที่สุดคือการใช้หน่วยความจำมากที่สุด ฉันก็ไม่แน่ใจเหมือนกันว่า VZ คืออะไร
Artem Russakovskii

2

nmonเป็นเครื่องมือที่ยอดเยี่ยมที่ทำในสิ่งที่คุณกำลังมองหา พัฒนาขึ้นสำหรับ AIX และ Linux สร้างเอาต์พุตรายละเอียดจำนวนมากและง่ายต่อการใส่ลงในรายงาน ถ้าคุณ google มันมี IBM wiki ที่มีเอกสารจำนวนมากและยูทิลิตี้เพิ่มเติมสำหรับการแยกวิเคราะห์ข้อมูล


2

ความหนาแน่นของเซิร์ฟเวอร์ทำสิ่งที่คุณอธิบาย

ฉันใช้กับเซิร์ฟเวอร์ที่ใช้งานจริงของเราและมีความสุขมาก คุณสมบัติเด่นคือความสามารถในการดูแผนภูมิคลิกที่จุดสูงสุดและดูปริมาณการใช้ CPU / หน่วยความจำของเซิร์ฟเวอร์ ณ เวลาปัจจุบันรวมถึงกระบวนการทำงานทั้งหมด พวกเขาเรียกมันภาพรวม

มันปรับปรุงอย่างต่อเนื่อง หนึ่งในคุณสมบัติล่าสุดคือการตรวจจับความผิดปกติซึ่งช่วยให้คุณตรวจจับความผิดปกติได้อย่างง่ายดาย นอกจากนี้คุณยังสามารถตั้งค่า treshold ต่างๆ


1
อาฉันลืมที่จะพูดถึงส่วนเล็ก ๆ น้อย ๆ ที่ฉันต้องการให้เป็นอิสระและเปิดแหล่งที่มาถ้าเป็นไปได้ มากกว่า $ 100 ต่อเซิร์ฟเวอร์ไม่ใช่สิ่งที่ฉันต้องการใช้ (และฉันมีเพียง 1 เซิร์ฟเวอร์เท่านั้นไม่ใช่ 5) serverdensity.com/pricing
Artem Russakovskii


2

คำตอบที่แนะนำเมื่อฉันถามคำถามที่คล้ายกัน:

อิคาปัน กล่าวว่า :

Muninเป็นวิธีที่ง่ายที่สุดในการรับกราฟสถานะการออนไลน์พร้อมความพยายามขั้นต่ำในการติดตั้งและกำหนดค่า ฉันยังใช้ atop สำหรับการใช้ cpu รวมโดยกระบวนการบางอย่าง แต่นั่นไม่ใช่สิ่งที่คุณขอ

David Spillet กล่าวว่า :

ฉันใช้collectdเพื่อบันทึกการโหลดระบบท่ามกลางพารามิเตอร์อื่น ๆ มันจัดเก็บข้อมูลในร้านค้าRRDที่สามารถสร้างกราฟและวิเคราะห์โดยใช้เครื่องมือและสคริปต์ที่มีอยู่มากมาย ฉันใช้เวอร์ชันนี้ของสคริปต์นี้เพื่อแก้ไขกราฟ ( ตัวอย่างผลลัพธ์ )

Collectd มีปลั๊กอินสำหรับการตรวจสอบสิ่งต่าง ๆ มากมาย (ทุกสิ่งที่ถูกถามบ่อยและสิ่งเล็ก ๆ น้อย ๆ ด้านบน) และการสร้างของคุณเองไม่ควรยากถ้าคุณต้องการอะไรที่พิเศษดังนั้นทำให้เป็นเครื่องมือที่ยืดหยุ่นมาก การกำหนดค่ากราฟใน rrd.cgi นั้นเป็นกระบวนการแบบแมนนวลมากแม้ว่าจะไม่ยาก แต่คุณอาจพบเครื่องมือที่สะดวกกว่าสำหรับการทำงานกับไฟล์ RRD ที่เก็บโดย collectd

คุณอาจตรวจสอบNagiosหรือOpenNMSด้วย


1

Muninจะทำทุกสิ่งที่คุณต้องการนอกกรอบโดยไม่ต้องใช้ Nagios หรือเครื่องมืออื่นใด มี RPMs พร้อมใช้งานสำหรับ OpenSUSE


มันทำกับปลั๊กอิน ถ้าเป็นเช่นนั้น ฉันไม่สามารถค้นหารายการที่ไม่ต้องการรายการกระบวนการที่กำหนดค่าไว้ล่วงหน้าเพื่อตรวจสอบได้
Artem Russakovskii

ไม่ชัดเจนจากคำถามเดิมของคุณที่คุณไม่ต้องการตรวจสอบรายการกระบวนการที่กำหนดไว้ล่วงหน้า - คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับความต้องการของคุณได้หรือไม่?
gareth_bowles

การชี้แจง: ชื่อกระบวนการไม่ได้และไม่ควรทราบล่วงหน้า - ความคิดคือการปล่อยให้มันตรวจสอบแล้วดูที่ผู้กระทำผิดอันดับต้น ๆ
Artem Russakovskii

1

บางทีOProfile แบบเก่าที่ดีจะทำในสิ่งที่คุณต้องการ? เป็นผู้สร้างโปรไฟล์ระดับเคอร์เนลที่มีค่าใช้จ่ายเพียงเล็กน้อย (ไม่กี่เปอร์เซ็นต์)

จากนั้นมีสคริปต์ Perl ที่ยอดเยี่ยมคือPSMonซึ่งช่วยให้คุณสามารถตั้งค่าขีด จำกัด ของ CPU / หน่วยความจำทุกชนิดได้ หากสิ่งเหล่านั้นเกิน psmon จะบันทึกข้อผิดพลาดและ / หรือฆ่ากระบวนการที่กระทำผิด

หลังจะไม่สร้างรายงานที่มีโปรไฟล์ใด ๆ ให้คุณ แต่ถ้ามันตัดสินใจที่จะฆ่ากระบวนการเดียวกันซ้ำแล้วซ้ำอีกคุณอาจพบว่าไอ้น่ารังเกียจที่คุณกำลังมองหาอยู่ :-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.