Poslao: 22 Avg 2011 21:39
|
offline
- bocke
- Moderator foruma
- Glavni moderator Linux foruma
- Pridružio: 16 Dec 2005
- Poruke: 12533
- Gde živiš: Južni pol
|
Moj pokušaj da odgovorim na jedno od česo postavljanih pitanja o slobodnoj memoriji pod Linuksom.
Verovatno vam je poznata komanda free:
$ free
total used free shared buffers cached
Mem: 769300 707724 61576 0 15508 134240
-/+ buffers/cache: 557976 211324
Swap: 1574364 338712 1235652
Free pokazuje upotrebu memorije. Bez opcije '-o' free pokazuje i dodatnu liniju (drugi red) koji prikazuje memoriju koja bi bila slobodna ako bi se oslobodila sva cache/buffer memorija. Buffer/cache memorija se uglavnom odnosi na disk/mrežni I/O (pisanje i čitanje). Sa opcijom '-o' izlaz bi izgledao ovako:
$ free -o
total used free shared buffers cached
Mem: 769300 707724 61576 0 15508 134240
Swap: 1574364 338712 1235652
Buffers/cache memorija, u praksi, služi za ubrzavanje i poboljšanje performansi I/O operacija. Ovim se postiže i brže (i stabilnije) izvršavanje procesa koji intezivno pišu i čitaju sa I/O uređaja. Znači ova memorija nije otišla u prazno. Da li to znači da imamo samo 61576 kilobajta slobodno? I da i ne. U slučaju potrebe, kernel alokator memorije (kernel servis za alokaciju memorije) će automatski pokušati da oslobodi potrebnu memoriju. Prva na udaru, u slučaju da fizički slobodna memorija nije dostupna, je upravo buffer/cache memorija. Kernel će automatski osloboditi deo buffer/cache memorije u količini koja je neophodna za alociranje memorije za novi proces.
Šta ako nije ni to dovoljno? Sada su na udaru deljena (shared), a zatim swap memorija. Deljena memorija se koristi za interprocesnu komunikaciju. Swap memorija služi za privremeno smeštanje ređe korišćenih memorijskih "strana" na disk. Swap memorija omogućava korišćenje veće količine memorije od one koja je fizički dostupna. U slučaju potrebe, deo ove memorije se može osloboditi. Deljena memorija za povećanje fizički dostupne memorije, swap memorija za smeštanje novih memorijskih strana u swap.
U svakom slučaju, potpuno oslobađanje svih ovih kategorija memorije dovodi do pogoršanja sistemskih performansi. Zato se memorija alocira automatski i po potrebi. Nije potrebno da to ručno radite. U stvari, ručnim "oslobađanjem" memorije možete pogoršati stabilnost sistema.
Da se vratimo na free, sada pokrenut sa opcijom -m (prikazuje cifre u megabajtima(:
$ free -m
total used free shared buffers cached
Mem: 751 602 148 0 6 83
-/+ buffers/cache: 512 238
Swap: 1537 332 1204
Šta nam ovo govori? Ukupno dostupna memorija za ne kernel procese je 751 mb. S obzirom da je ukupna memorija na mašini 768 mb, to nam govori da je kernel rezervisao određenu količinu za svoje potrebe. Ova cifra (751 mb) je približno jednaka količini memorije koja je preostala nakon učitavanja kernela u memoriju i rezervisanja određene količine za buduće potrebe kernela:
$ dmesg | grep Memory
[ 0.000000] Memory: 766468k/785600k available (3414k kernel code, 18680k reserved, 1408k data, 500k init, 0k highmem)
Ostatak je prilično jasan. Trenutno zauzeta memorija je 602 megabajta. Apsolutno slobodno je 148 mb. Ukoliko bi se oslobodila buffer/cache memorija imali bismo 238 mb slobodno. 332 mb se nalazi u swap memoriji, a 1204 megabajta swap memorije je slobodno.
Ova statistika meni govori da postoji mogućnost da je swap particija prevelika za potrebe sistema. Ali u ovom trenutku sistem nije dovoljno "opterećen" za takvu ocenu. Ako bi teško opterećen sistem koristio samo deo swap memorije, to bi po mom mišljenju govorilo da je swap particija prevelika.
Da li možemo da definitivno uklonimo swap memoriju? U ovom slučaju nikako. 768 mb je premalo. Teorijski da, u slučaju da imate ogromnu količinu memorije, a mašina ne pokreće vrlo zahtevne procese kao što su serveri koji opslužuju veliki broj klijenata. Zašto? Najveći problem je što bez swap memorije, u slučaju prekoračenja fizički dostupne memorije, kernel nema odakle da izvuče dodatnu memoriju. Da, tu je cache/buffer i deljena memorija, ali kada se ona oslobodi, ne postoji više ništa što kernel može da uradi i crashuje. U svakom slučaju je mnogo bezbednije izdvojiti određeni prostor za swap particiju za "ne daj bože" čak i u slučaju da imate ogromnu količinu ram memorije. Kako odrediti optimalnu količinu swap particije. Nikako po prosečnoj upotrebi. Procenat upotrebe swap memorije treba promatrati kada je sistem pod najvećim opterećenjem, ali ne uzimati apsolutno ni tu cifru, već računati nešto veću količinu. Ovim bi se ogradili od mogućnosti da napravimo preveliku grešku u proceni. Ili možemo uraditi nešto još sigurnije, primeniti važeća odokativna pravila: 2 x fizička količina ram memorije ili 1/1,5 fizička količina ram memorije ukoliko je dostupna memorija nekoliko gigabajta.
Ovo je samo moje viđenje i ne mora biti 100% tačno. Vrlo rado ću prihvatiti vaše ispravke. Ako imate iskustva sa administracijom memorijski zahtevnih sistema, voleo bih da čujem vaša iskustva, predloge i savete iz prakse.
Btw, nisam se bavio time kako promeniti default podešavanja kernel parametara za različite tipove virtualne memorije. Ovo je više neko teorijsko posmatranje situacije bez previše tehnčkih detalja i finih tweakova.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 23 Avg 2011 23:30
|
offline
- Pridružio: 25 Maj 2005
- Poruke: 1482
- Gde živiš: Gracanica, Kosovo
|
Skoro svaki unix-like (*BSD, Linux...) nastoji da sto vise iskoristi dostupnu memoriju. "Slobodna memorija je neiskoriscena memorija".
Sto se tice velicine swap-a, ja obicno idem na x2 ili x1, a ako ima previse RAM-a onda nekih 1-2GB. Swap veci od velicine RAM-a ti treba jednino ako si developer (sistem dump-ovi koji se upisuju na swap) ili ako se koristi hibernacija (onda je swap obavezan).
Postoji opcija u Linux kernelu koja se zove swappiness i koja omogucava sistemu da kada bude bilo potrebno osloboditi deo memorije odlucuje o tome dali ce vise prebacivati "stranice" u swap, ili ce radije oslobadjati stranice iz pagecache-a i sto manje slati stranice u swap. Vrednos moze biti od 0 do 100, a podrazumevano je 60:
echo 100 > /proc/sys/vm/swappiness
http://kerneltrap.org/node/3000
Linux kernel ima mogucnost i da "isprazni" pagecache, jednostavno zadajuci vrednost za /proc/sys/vm/drop_caches. Npr:
echo 3 > /proc/sys/vm/drop_caches
http://linux-mm.org/Drop_Caches
Za ostale: igrajte se sa ovim opcijama, i pratite kolicinu slobodne memorije i velicinu bafera i kesa koristeci free, vmstat ili top komande.
@bocke
Vezano za stalno/preterano koriscenje swapa, prati vrednosti si i so (swap-in, swap-uot; na *BSD je pi i po u page delu) kako bi video dal sistem efektivno koristi swap. Ako su vrednosti velike zabrini se.
|
|
|
|
|
Poslao: 23 Jan 2013 21:28
|
offline
- Brok
- Moderator foruma
- Mihajlo Bogdanović
- Linux driver - fighter - warrior
- Pridružio: 04 Maj 2005
- Poruke: 3259
|
Još dve korisne komande za RAM.
sudo dmidecode -t 16
ili se prijavite kao root ako nije u pitanju Ubuntu, Mint, verovatno i Debian....
root@brok4:~# dmidecode -t 16
# dmidecode 2.11
SMBIOS 2.6 present.
Handle 0x001D, DMI type 16, 15 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 16 GB
Error Information Handle: Not Provided
Number Of Devices: 2
Dobićete bazične informacije o Vašem RAM-u, mogućnostima za nadogradnju i još po neku informaciju...
Naredna komanda daje nešto više informacija, takođe komandu pokrenuti kao root, sudo dmidecode -t memory
root@brok4:~# dmidecode -t memory
# dmidecode 2.11
SMBIOS 2.6 present.
Handle 0x001D, DMI type 16, 15 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 16 GB
Error Information Handle: Not Provided
Number Of Devices: 2
Handle 0x001E, DMI type 17, 28 bytes
Memory Device
Array Handle: 0x001D
Error Information Handle: 0x0000
Total Width: 64 bits
Data Width: 64 bits
Size: 4096 MB
Form Factor: SODIMM
Set: None
Locator: DIMM_A
Bank Locator: BANK 0
Type: DDR3
Type Detail: Synchronous
Speed: 1333 MHz
Manufacturer: 8502
Serial Number: 00000000
Asset Tag: 02000000
Part Number: PSD34G13332S
Rank: Unknown
Handle 0x0020, DMI type 17, 28 bytes
Memory Device
Array Handle: 0x001D
Error Information Handle: 0x0000
Total Width: 64 bits
Data Width: 64 bits
Size: 4096 MB
Form Factor: SODIMM
Set: None
Locator: DIMM_B
Bank Locator: BANK 2
Type: DDR3
Type Detail: Synchronous
Speed: 1333 MHz
Manufacturer: 80CE
Serial Number: B10EEE3F
Asset Tag: 02105200
Part Number: M471B5273CH0-CH9
Rank: Unknown
|
|
|
|