Skocz do zawartości
Zaloguj się, aby obserwować  
Jarosław Szmańda

Debian 5 - duże użycie pamięci

Polecane posty

Ostatnio skoczyło o 30MB - z 8, więc różnica sporo - najgorsze, że nie mogę odnaleźć winowajcy...

Macie jakiś pomysł?

 

66052920536388321760_thumb.png 49541448754574250326_thumb.png 14075878604120584437_thumb.png

 

W skrócie: winowajcę możesz znaleźć przez dodanie kolumny VIRT do SHR. Ponieważ Twój dostawca używa kontenerów wirtualizujących (np OpenVZ), top pokazuje nieprawdziwe sumaryczne zużycie użycie swap i buforów (zero), a jednak kolumna VIRT różni się od RES (virt = RES + SWAP). Działające w Twoim kontenerze procesy zdążyły zbuforować część nieużywanej pamięci. Generalnie ciężko Ci będzie uniknąć takiego zużycia pamięci po kilku dniach uptime, czytaj: wszystko jest raczej w porządku. Możesz kombinować używając mniej pamięciożernych powłok, zmienić serwer ssh, ale to już zupełnie inny temat.

W przypadku OpenVZ, najbardziej dokładne zużycie pamięci (pokrywające się z tym co masz w podsumowaniu top/htop) poda Ci poniższy skrypt, korzystający z pliku /proc/user_beancounters (statystyki kontenera OpenVZ). Pamiętaj, że jądro hosta również zużywa pamięć na obsługę Twojego kontenera (obsługa przerwań, tcp/ip i tak dalej).

 

#!/usr/bin/perl
use strict;
use warnings;

# Author: David J. Weller-Fahy
# Inspired by
# Placed in the public domain

my($field, $res_bytes, $res_pages, $value, $total);

print("$0 must be run by a SuperUser!\n") and exit(1) if ({:content:}lt; != 0);

# If no command-line parameters are used, stick with the default.
@ARGV = ('/proc/user_beancounters') unless @ARGV;

# These are the resources we care about.
$res_bytes = "dgramrcvbuf|kmemsize|othersockbuf|tcprcvbuf|tcpsndbuf|";
$res_pages .= "privvmpages|vmguarpages";

$total = 0;

# Iterate over the files specified in @ARGV.
while (<>) {
# Get rid of the UID and trailing colon.
s![[:digit:]]+:!! if m!kmemsize!;

# Strip leading/trailing whitespace.
s!^[[:space:]]+!!;
s![[:space:]]+$!!;

# We only care about the lines containing the resources in
# $res_(bytes|pages), so skip all other lines.
next unless m!^(?:$res_bytes$res_pages)!;

# Set the field to extract.
$field = (m!^kmemsize! ? 2 : 1);

# Grab the resource and value.
$value = (split)[$field];

# If this is a 'page' resource, multiply by the number of bytes in a page.
$value *= 4096 if m!^(?:$res_pages)!;

# Add this value to the total.
$total += $value;
}

# Original used 1024000 (??).  Not sure why, the value below is 1024*1024.
$total /= 1048576;

# Print the number of MB used, rounded to 2 decimal places.
printf("Total MiB used: %.2f\n", $total);

 

Pozdrawiam

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×