1》記憶體子系統 1>組件: slab allocator buddy system kswapd pdflush 2>虛擬化環境: PA:進程地址; HA:虛擬機地址; MA:機器地址; 虛擬機轉換:PA >HA GuestOS(來賓主機),OS(宿主主機); Shadow PT:影子列表 3>Me ...
1》記憶體子系統
1>組件:
slab allocator
buddy system
kswapd
pdflush
2>虛擬化環境:
PA:進程地址;
HA:虛擬機地址;
MA:機器地址;
虛擬機轉換:PA---->HA
GuestOS(來賓主機),OS(宿主主機);
Shadow PT:影子列表
3>Memory:
TLB:提升性能;
Hugetable page:
使用的文件系統:Hugetlbfs;
啟用hugepages:
1)修改/etc/sysctl.conf:
vm.nr_hugepages = n
2) Kernel parameter:
hugepages = n
2》創建hugepages從而被應用所使用(不必明確指定文件系統類型,應用要使用時會自動調用,一般MYSQL的緩存塊需要使用大頁面):
3》Strace看進程如何運行,執行了哪些系統調用:
1>strace -p PID ***查看啟動進程的系統調用;
2>strace 命令:查看命令的系統調用;
strace -c 命令:加入-c可以只輸出命令過程中的摘要信息;
-o:將追蹤結果保存至文件中,以供後續分析使用;
4》優化記憶體子系統的使用:
1>儘可能降低微小記憶體對象的開銷;
Slab cache:
2>降低或延遲慢速子系統的服務時間;
Filesystem metadata:buffer cache(slab cache)====>使用buffer cache緩存文件元數據;
Disk IO:page cache====>使用page cache來緩存DISK IO,加速讀操作;
Interprocess communications:shared memory====>使用共用記憶體來完成進程間通信;
Network IO:buffer cache,arp cache,connection ruacking====>使用buffer cache,arp cache和connection tracking提升網路IO性能;
3>設置記憶體的最小空餘KB;
4>註意避免記憶體過量使用:
物理記憶體的過量使用是以swap為前提的,可以超出物理記憶體一部分;
0:不回收dentries和inodes;
1-99:傾向於不回收;
100:傾向性與page cache和swap cache相同;
100+:傾向於回收;
記憶體溢出(OOM):當內核發現由於發生記憶體溢出而無法再使用時會強制殺死占用大量記憶體的進程;
5>調整網路IO的ARP緩存(/proc/net/arp);
5》進程間通信相關記憶體的調優:
1>進程間通信類型:messages,semaphores,shared memory;
2>查看三者當前的限值:
3>進程間通信管理類命令:
ipcs:查看一些消息隊列;
ipcrm:刪除某些已經失去作用的消息隊列,釋放記憶體;
4>share memory 和messages的相關參數:
shm:
shmmni:系統級別,所允許使用的共用記憶體段上限;
shmall:系統級別,能夠為共用記憶體分配使用的最大頁面數;
shmmax:單個共用記憶體段的上限;
messages:
msgmnb:單個消息隊列的上限,單位為位元組,預設是16384;
msgmni:系統級別,消息隊列個數上限;
msgmax:單個消息大小的上限,單位為位元組;
5>手動清寫臟緩存和緩存,然後回收:
sync:
echo s > /proc/sysrq-trigger
回收:
echo 1 > /proc/sys/vm/drop_caches
1 to free pagecache
2 to free dentries and inodes
3 to free pagecache,dentries and inodes
6>Out-of-memory killer:
決定各個進程是否會被殺死的數值oom_score:
-16-15:幫助計算oom_score
-17:disables the oom_killer for that process
6》Swap相關:
1>哪些頁面會被swap:
非活動頁;
匿名頁;
Swap cache:可以有效的避免資源競爭;
2>如何提高swap的性能:
降低swap的think time,意味著我們使用小的swap分區;
降低訪問次數,儘量不要使用swap,增大物理記憶體,不行的話就增加多個swap分區;
降低服務時間;
7》監控記憶體使用相關命令:
sar -r:查看記憶體活動情況;
sar -R:記憶體變換速率;
sar -W:緩存空間活動情況;
sar -B:I/O使用情況,報告頁面換進換出;