|
Het vmstat-commando is het meest gebruikte Linux/Unix-monitoringsinstrument dat de toestandswaarden van een server op een bepaald tijdsinterval weergeeft, inclusief de serversCPU-gebruik, geheugengebruik, virtueel geheugenwissel, IO-lezen en schrijven. Dit commando is mijn favoriete commando om Linux/Unix te controleren, één is dat Linux/Unix wordt ondersteund, en het andere is dat ik vergeleken met de bovenkant het CPU-, geheugen- en IO-gebruik van de hele machine kan zien, in plaats van alleen het CPU- en geheugengebruik van elk proces te zien (verschillende gebruiksscenario's). Over het algemeen wordt het gebruik van de vmstat-tool gedaan via twee numerieke parameters: de eerste parameter is het aantal bemonsterde tijdsintervallen, de eenheid is seconden, en de tweede parameter is het aantal monsters, zoals:
root@ubuntu:~# VMSTAT 2 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd gratis buff cache si zo bi bo in cs us sy id wa 1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0 2 betekent dat de serverstatus eens per twee seconden wordt verzameld, en 1 betekent dat de serverstatus slechts één keer wordt verzameld. In feite zullen we tijdens het aanvraagproces gedurende een bepaalde periode monitoren, en als we dat niet willen, kunnen we de vmstat gewoon direct beëindigen, bijvoorbeeld:
root@ubuntu:~# VMSTAT 2 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd gratis buff cache si zo bi bo in cs us sy id wa 1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0 0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0 1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0
Dit betekent dat vmstat elke 2 seconden data verzamelt en doorgaat tot ik het programma beëindig, en ik beëindig het programma na vijf keer data verzamelen hier. Oké, het commando wordt geïntroduceerd, laten we nu beginnen met het uitleggen van de betekenis van elke parameter. rHet betekent dat ik de wachtrij moet draaien (dat wil zeggen, hoeveel processen er echt aan de CPU zijn toegewezen), de server die ik getest heb is momenteel relatief inactief, er draaien geen programma's, en als deze waarde het aantal CPU's overschrijdt, ontstaat er een CPU-bottleneck. Dit heeft ook te maken met de belasting van de top; over het algemeen is de belasting hoger als deze boven de 3 uitkomt, hoger als deze boven de 5 uitkomt, en als deze boven de 10 uitkomt, is het niet normaal en is de toestand van de server erg gevaarlijk. De belasting van de top is vergelijkbaar met die van een lopende wachtrij per seconde. Als de lopende wachtrij te groot is, betekent dat dat je CPU bezet is, wat meestal leidt tot hoog CPU-gebruik. bHet betekent het geblokkeerde proces, dit zegt niet veel, het proces is geblokkeerd, iedereen begrijpt het. SWPDAls de grootte van het gebruikte virtuele geheugen groter is dan 0, betekent dit dat je machine onvoldoende fysiek geheugen heeft, en als dit niet de oorzaak is van het geheugenlek van het programma, is het tijd om het geheugen te upgraden of de geheugenverbruikende taken naar een andere machine te migreren. gratis De grootte van het vrije fysieke geheugen, mijn machinegeheugen is in totaal 8G, en de rest 3415M. Buff Het Linux/Unix-systeem wordt gebruikt om de cache van content in de map, machtigingen, enzovoort op te slaan, ik neem waarschijnlijk meer dan 300 miljoen op deze machine in beslag cachecache wordt direct gebruikt om de bestanden die we openen te onthouden, de bestanden te bufferen, ik neem meer dan 300 miljoen in beslag op mijn eigen machine (hier is het slimme van Linux/Unix: gebruik een deel van het vrije fysieke geheugen om bestanden en mappen te cachen, om de uitvoering van het programma te verbeteren; wanneer het programma geheugen gebruikt, wordt buffer/cached snel gebruikt). ) si Als deze waarde groter is dan 0, betekent dit dat het fysieke geheugen niet voldoende is of dat het geheugen gelekt is. Mijn machine heeft genoeg geheugen en alles werkt prima. dus De grootte van de schijf die per seconde naar virtueel geheugen wordt geschreven, als deze waarde groter is dan 0, is hetzelfde als hierboven. bi BlokapparatuurHet aantal ontvangen blokken per seconde, hier verwijst het blokapparaat naar alle schijven en andere blokapparaten op het systeem, de standaard blokgrootte is 1024byte, ik heb geen IO-operatie op de machine, dus het is altijd 0 geweest, maar ik heb het gezien op machines die grote hoeveelheden data verwerken (2-3T) kunnen oplopen tot 140.000/s, en de schrijfsnelheid van de schijf is bijna 140M per seconde boHet aantal blokken per seconde dat door een blokapparaat wordt verzonden, bijvoorbeeld wanneer we een bestand lezen, is bo groter dan 0. bi en bo liggen over het algemeen dicht bij 0, anders is de IO te frequent en moet het worden aangepast. inHet aantal interrupts per seconde van de CPU, inclusief tijdsinterrupts CSHet aantal contextwisselingen per seconde, bijvoorbeeld, wanneer we een systeemfunctie aanroepen, moeten we contexten wisselen, en threadswitchingProcescontextBijvoorbeeld, in webservers zoals Apache en nginx voeren we doorgaans prestatietests uit met duizenden of zelfs tienduizenden gelijktijdigheid, en het proces van het kiezen van een webserver kan worden verlaagd door de piek van het proces of de thread, stresstest, totdat cs tot een relatief kleine waarde is, het aantal processen en threads een meer passende waarde is. Systeemaanroepen zijn ook hetzelfde: elke keer dat een systeemfunctie wordt aangeroepen, komt onze code in de kernelruimte, wat resulteert in contextwisselingen, wat erg resource-intensief is, en we moeten proberen frequente aanroepen naar systeemfuncties te vermijden. Te veel contextwisselingen betekenen dat het grootste deel van je CPU wordt verspild aan contextwisselen, waardoor de CPU minder tijd heeft om serieuze dingen te doen en de CPU niet volledig wordt benut, wat niet aan te raden is. VSgebruikerCPU-tijdIk zag ooit dat de VS bijna 100 had en de r-run queue 80 bereikte op een server die heel vaak versleuteling en decryptie deed (de machine was stressgetest en de prestaties waren niet goed). syAls de CPU-tijd van het systeem te hoog is, betekent dit dat de systeemaanroepen lang zijn, zoals bij frequente IO-operaties. legitimatiebewijs Idle CPU-tijd, over het algemeen, id + us + sy = 100, over het algemeen denk ik dat id idle CPU-gebruik is, us is CPU-gebruik van de gebruiker, sy is systeem-CPU-gebruik. wtWacht op IO-CPU-tijd.
|