Zpět k příkazu ps - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Seriály

Více seriálů



Software

Zpět k příkazu ps

28. listopadu 2002, 00.00 | Z toho, co jsme si ukázali v minulých dílech našeho seriálu, je zřejmé, že aplikace může svou prací s pamětí omezit ostatní a/nebo systém jako celek. Všechny potřebné informace o tom, co se se systémem a aplikacemi děje, nám opět nabídne příkaz ps.

Z toho, co jsme si ukázali v minulých dílech našeho seriálu, je zřejmé, že aplikace může svou prací s pamětí omezit ostatní a/nebo systém jako celek. Mohou nastat dva případy:

  • aplikace, která alokuje příliš mnoho paměti, a zapomíná ji uvolnit, zabere hodně místa v odkládacím prostoru na disku, kam se zapisují "odebrané" stránky. Za normálních okolností to příliš nevadí; problém to ale může znamenat v případě, že máme na disku už velmi málo místa. Naštěstí se to při dnešních kapacitách disků stává zřídkakdy;
  • horší to je s aplikací, která nejen využívá extrémně velké množství paměti, ale navíc každou chvilku "sáhne" na jinou adresu tak, že nenechá ani jedinou ze stránek "nedotčenou". Taková aplikace pak neustále nutí systém přidělovat nové stránky a staré odkládat na disk, a to ovšem průchodnost systému jako celku výrazně zpomalí.

Všechny potřebné informace nám opět nabídne příkaz ps

Obsazená paměť

Pro zjištění kolik paměti který proces právě využívá nám poslouží příkaz ps s klíčovými slovy vsize a rss. První z nich zajistí výpis toho, kolik virtuální paměti právě ten který proces využívá — tento údaj přesně odpovídá spotřebě paměti v nevirtuálním systému typu Mac OS 9. Druhý údaj, rss, ukazuje, kolik je v současnosti aplikaci přiděleno reálné paměti. Oba dva údaje jsou v kilobytech:

 2 ~> ps -o pid,ucomm,vsize,rss
   PID UCOMM                 VSZ    RSS
   421 zsh                  2136    160
   429 telnet              14496    388
   422 zsh                  2136    160
  1509 zsh                  2136    540
  7793 zsh                  2136    796
 3 ~> 

Stojí za to si všimnout, že velikost virtuální paměti je větší — někdy mnohem větší — než reálné. To nemusí nutně souviset jen s tím, že správce paměti může procesu stránky odebrat; je to také tím, že pokud proces alokuje nějakou paměť, ale dosud ji nepoužije, odpovídající stránky není třeba přidělovat.

Ukažme si to na příkladu triviálního programu, který alokuje paměť po stovkách megabytů, ale nijak ji nevyužívá: zdrojový kód je tak jednoduchý, že by jej měli bez obtíží pochopit i neprogramátoři.

 98 /tmp> >t.m
 #include <stdlib.h>
   int main() {
   while (1) {
     if (!malloc(100*1024*1024)) break;
     usleep(100000);
   }
   return 0;
 }
 99 /tmp> cc t.m && ( ./a.out & while (true) ; do ( ps -o ucomm,vsize,rss | fgrep a.out )  ; sleep 1 ;  done )
 a.out             1025548    296
 a.out             2049548    296
 a.out             3073548    296
 *** malloc: vm_allocate(size=104857600) failed with 3
 *** malloc[12163]: error: Can't allocate region
 ^C
 100 /tmp> 

Vidíme, že program běžel bez problémů (a, mimochodem, bez nejmenšího omezujícího vlivu na zbytek operačního systému) dokud neskončil na tom, že pro funkci malloc už nebyl k dispozici adresový prostor — nikoli paměť, ale volné adresy. Skutečné paměti aplikace potřebovala pořád stejně — nějakých 300 KB.

To proto, že se ve skutečnosti vlastně žádná paměť nealokovala: k tomu by došlo teprve tehdy, až by se program pokusil "naalokovanou" paměť použít. Hle, další výhoda virtuální paměti!

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

Nejčtenější články
Nejlépe hodnocené články
Apple kurzy

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: