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:
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):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová
Diskuse k článku