Linux內存子系統及常用調優參數


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使用情況,報告頁面換進換出;  

                    

                  

              

     

     

        

         

                  

                  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM