Linux性能優(yōu)化

優(yōu)化Linux文件打開最大數(shù)

  • 為了防止失控的進程破壞系統(tǒng)的性能,UNIX和Linux會跟蹤進程使用的大部分資源,并允許用戶和系統(tǒng)管理員使用對進程的資源限制,例如控制某個進程打開的文件數(shù)扳碍、對某個用戶打開系統(tǒng)進程數(shù)進行限制等,一般限制手段包括軟限制和硬限制

    • 軟限制(soft limit):內(nèi)核實際執(zhí)行的限制,任何進程都可以將軟限制設(shè)置為任意小于或等于對進程限制的硬限制的值戴质、最大線程數(shù)(noproc)和文件數(shù)(nofile)
    • 硬限制(hard limit):可以在任何時候任何進程中設(shè)置,但硬限制只能由超級用戶修改
  • Linux系統(tǒng)一切皆文件,對Linux進行各種操作,實際就是對文件進行操作,文件可分為普通文件鳍侣、目錄文件、鏈接文件和設(shè)備文件.而文件描述符(file descriptor)是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引,其值是一個非負(fù)整數(shù)(通常是小正數(shù)),用于指代被打開的文件,所有執(zhí)行I/O操作的系統(tǒng)調(diào)用都通過文件描述符

  • Linux系統(tǒng)默認(rèn)已經(jīng)打開的文件描述符包括STDIN_FILENO 0表示標(biāo)準(zhǔn)輸入、STDOUT_FILENO 1表示標(biāo)準(zhǔn)輸出疫鹊、STDERR_FILENO 2表示標(biāo)準(zhǔn)錯誤輸出,默認(rèn)打開一個文件,它的文件描述符為3

  • 每個文件描述符與一個打開文件相對應(yīng),不同的文件描述符可以指向同一個文件,相同的文件可以被不同的進程打開,也可以在同一進程中被多次打開

  • Linux系統(tǒng)為每個進程維護了一個文件描述符,該表的值都是從0開始,在不同的進程中用戶會看到相同的文件描述符,相同文件描述符有可能指向同一個文件,也可能指向不同的文件.Linux內(nèi)核對文件操作,維護了3個數(shù)據(jù)結(jié)構(gòu)概念:

    • 進程級的文件描述符表
    • 系統(tǒng)級的打開文件描述符表
    • 文件系統(tǒng)的i-node表
  • 其中進程級的描述符表的每一條目記錄了單個文件描述符的相關(guān)信息,例如控制文件描述符操作的一組標(biāo)志及對打開文件句柄的引用.Linux內(nèi)核對所有打開的文件都維護了一個系統(tǒng)級的描述符表(open file description table).將描述符表中的記錄行稱為打開文件句柄(open file handle),一個打開文件句柄存儲了一個打開文件相關(guān)的全部信息

    • 當(dāng)前文件偏移量
    • 打開文件時所使用的的狀態(tài)標(biāo)識
    • 文件訪問模式
    • 與信號驅(qū)動相關(guān)的設(shè)置
    • 對該文件inode對象的引用
    • 文件類型和訪問權(quán)限
    • 指針指向該文件所持有的鎖列表
    • 文件的各種屬性
  • 默認(rèn)Linux內(nèi)核對每個用戶設(shè)置了打開文件最大數(shù)為1024,對于高并發(fā)網(wǎng)站,是遠(yuǎn)遠(yuǎn)不夠的,需要將默認(rèn)值調(diào)整到更大,方法如下:

    • Linux每個用戶打開文件最大數(shù)臨時設(shè)置方法,重啟服務(wù)器該參數(shù)無效
    unlimit -n 65535
    
    • Linux每個用戶打開文件最大數(shù)永久設(shè)置方法,修改/etc/security/limits.conf,在末尾修改以下內(nèi)容
    *               soft    noproc            65535
    *               hard    noproc            65535
    *               soft    nofile            65535
    *               hard    nofile            65535
    
    • 上述設(shè)置為對每個用戶分別設(shè)置nofile、noproc最大數(shù),如果需要對Linnx整個系統(tǒng)設(shè)置文件最大限制數(shù),需修改/proc/sys/fs/file-max中的值,該值為Linux總文件打開數(shù).例如設(shè)置為3865161233

內(nèi)核參數(shù)的優(yōu)化

  • Linux /proc/sys目錄下存放著多數(shù)內(nèi)核的參數(shù),并且可以在系統(tǒng)運行時進行更改,一般重新啟動機器就會失效.而/etc/sysctl.conf是一個允許改變正在運行中的Linux系統(tǒng)的接口,它包含一些TCP/IP堆棧和虛擬內(nèi)存系統(tǒng)的高級選項,修改內(nèi)核參數(shù)永久生效
  • /proc/sys下內(nèi)核文件與配置文件sysctl.conf中變量存在著對應(yīng)關(guān)系,即修改sysctl.conf配置文件,實際是修改/proc/sys相關(guān)參數(shù),所以對Linux內(nèi)核優(yōu)化只需修改/etc/sysctl.conf文件即可

影響服務(wù)器性能因素

  • 影響生產(chǎn)環(huán)境Linux服務(wù)器性能的因素有很多,一般分為兩大類,即操作系統(tǒng)層級和應(yīng)用程序級別.以下為各級別影響性能的具體項及性能評估的標(biāo)準(zhǔn)

    1. 操作系統(tǒng)級別
      • 內(nèi)存
      • CPU
      • 磁盤I/O
      • 網(wǎng)絡(luò)I/O帶寬
    2. 應(yīng)用程序及軟件
      • Nginx
      • MySQL
      • Tomcat
      • PHP
    3. Linux系統(tǒng)性能評估表
    影響性能因素 評判標(biāo)準(zhǔn)
    糟糕
    CPU user%+sys% < 70% user%+sys% = 85% user%+sys% >= 90%
    內(nèi)存 Swap In(si)=0 Swap Out(so)=0 Per CPU with 10 page/s More Swap In & Swap Out
    磁盤 iowait% < 20% iowait% = 35% iowait% >= 50%
    1. Linux系統(tǒng)性能分析工具
      • 常用系統(tǒng)性能分析命令為vmstat、sar惧浴、iostat、netstat奕剃、free衷旅、ps、top纵朋、iftop等
      • 常用系統(tǒng)性能組合命令:
        • vmstat柿顶、sar、iostat:檢測是否是CPU瓶頸
        • free操软、vmstat:檢測是否是內(nèi)存瓶頸
        • iostat:檢測是否是磁盤I/O瓶頸
        • netstat嘁锯、iftop:檢測是否是網(wǎng)絡(luò)帶寬瓶頸

Linux服務(wù)器性能評估與優(yōu)化

  • Linux服務(wù)器性能評估與優(yōu)化是一項長期的工作,需要隨時關(guān)注網(wǎng)站服務(wù)器的運行狀態(tài),及時作出相應(yīng)的調(diào)整

    1. Linux系統(tǒng)整體性能評估

      • uptime命令主要用于查看當(dāng)前服務(wù)器整體性能,例如CPU、負(fù)載、內(nèi)存等值的總覽,以下為uptime詳解
      uptime
      21:51:02 up 13:24,  1 user,  load average: 0.00, 0.01, 0.05
      
      • load average負(fù)載有3個值,分別表示最近1min家乘、5min蝗羊、15min系統(tǒng)的負(fù)載,3個值的大小一般不能大于系統(tǒng)邏輯CPU核數(shù)的2倍,例如Linux操作系統(tǒng)有4個邏輯CPU,如果load average的3個值長期大于8時,說明CPU很繁忙,負(fù)載很高,可能會影響系統(tǒng)性能,但是偶爾大于8時,可以不用擔(dān)心,一般不會影響系統(tǒng)性能
      • 如果load average的輸出裝小于CPU邏輯個數(shù)的2倍,則表示CPU還有空閑的時間片.基于此參數(shù)不能完全確認(rèn)服務(wù)器的性能瓶頸,需要借助其他工具判斷
    2. CPU性能評估

      • 利用vmstat命令監(jiān)控CPU,該命令可以顯示關(guān)于系統(tǒng)各種資源之間相關(guān)性能的簡要信息,主要用它來查看CPU負(fù)載及隊列情況
      vmstat
      procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----
      r  b  swpd   free  buff  cache   si   so    bi   bo   in   cs us sy id  wa st
      1  0     0 625548  2148 761888    0    0     7   17   28   74 0  0  100  0  0
      
      • r:該列表示運行和等待CPU時間片的進程數(shù),這個值如果長期大于系統(tǒng)CPU的個數(shù),說明CPU不足,需要增加CPU

      • b:該列表示在等待資源的進程數(shù),比如正在等待I/O或者內(nèi)存交換

      • us:該列顯示了用戶進程消耗的CPU時間百分比,us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期大于50%,就需要考慮優(yōu)化程序或算法

      • sy:該列顯示了內(nèi)核進程消耗的CPU時間百分比,sy的值較高時,說明內(nèi)核消耗的CPU資源很多

      • us+sy:參考值為80%,如果us+sy大于80%說明可能存在CPU資源不足

      • 利用sar命令監(jiān)控系統(tǒng)CPU,sar功能很強大,可以對系統(tǒng)的每個方面進行單獨的統(tǒng)計,但是使用sar命令會增加系統(tǒng)開銷,不過這些開銷是可以評估的,對系統(tǒng)的統(tǒng)計結(jié)果不會有很大影響

      sar -u 2 10
      Linux 3.10.0-957.el7.x86_64 (orange)   03/24/2020  _x86_64_    (1 CPU)
      
      10:10:42 PM   CPU     %user     %nice   %system   %iowait    %steal     %idle
      10:10:44 PM   all      0.00      0.00      0.50      0.00      0.00     99.50
      10:10:46 PM   all      0.00      0.00      0.00      0.00      0.00    100.00
      10:10:48 PM   all      0.00      0.00      0.00      0.00      0.00    100.00
      10:10:50 PM   all      0.00      0.00      0.00      0.00      0.00    100.00
      10:10:52 PM   all      0.00      0.00      0.00      0.00      0.00    100.00
      10:10:54 PM   all      0.00      0.00      0.50      0.00      0.00     99.50
      10:10:56 PM   all      0.00      0.00      0.00      0.00      0.00    100.00
      10:10:58 PM   all      0.00      0.00      0.00      0.00      0.00    100.00
      10:11:00 PM   all      0.50      0.00      2.49      0.00      0.00     97.01
      10:11:02 PM   all      0.00      0.00      1.51      0.00      0.00     98.49
      Average:      all      0.05      0.00      0.50      0.00      0.00     99.45
      
      • 輸出結(jié)果詳解:
        • %user:該列顯示用戶進程消耗的CPU時間百分比
        • %nice:該列顯示了運行正常進程所消耗的CPU時間百分比
        • %system:該列顯示了系統(tǒng)進程消耗的CPU時間百分比
        • %iowait:該列顯示了I/O等待所占用的CPU時間百分比
        • %steal:該列顯示了CPU處在空閑狀態(tài)的時間百分比
        • %idle:該列顯示了在內(nèi)存相對緊張的環(huán)境下pagein強制對不同頁面進行的steal操作
    3. 內(nèi)存性能評估

      • 利用free指令監(jiān)控內(nèi)存,free是監(jiān)控Linux內(nèi)存使用狀況最常用的指令
      free -m
                    total        used        free      shared  buff/cache   available
      Mem:           1980         624         419           9         936        1163
      Swap:          2047           0        2047
      
      • 一般而言,服務(wù)器內(nèi)存可以通過以下方法判斷是否空余
        • 應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存大于70%時,表示系統(tǒng)內(nèi)存資源非常充足,不影響系統(tǒng)性能
        • 應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存小于20%時,表示系統(tǒng)內(nèi)存資源緊缺,需要增加系統(tǒng)內(nèi)存
        • 20%<應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<70%時,表示系統(tǒng)內(nèi)存資源基本能滿足應(yīng)用需求,暫時不影響系統(tǒng)性能
    4. 磁盤I/O性能評估

      • 利用iostat評估磁盤性能,監(jiān)控磁盤I/O讀寫及帶寬
      iostat -d 1 10
      Linux 3.10.0-957.el7.x86_64 (orange)   03/24/2020  _x86_64_    (1 CPU)
      
      Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
      scd0              0.00         0.11         0.00       5476          0
      sda               0.29         7.09        20.92     354986    1046959
      dm-0              0.29         6.74        20.84     337211    1042843
      dm-1              0.00         0.05         0.00       2460          0
      dm-2              0.00         0.10         0.04       5160       2048
      
      Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
      scd0              0.00         0.00         0.00          0          0
      sda               0.00         0.00         0.00          0          0
      dm-0              0.00         0.00         0.00          0          0
      dm-1              0.00         0.00         0.00          0          0
      dm-2              0.00         0.00         0.00          0          0
      
      Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
      scd0              0.00         0.00         0.00          0          0
      sda               0.00         0.00         0.00          0          0
      dm-0              0.00         0.00         0.00          0          0
      dm-1              0.00         0.00         0.00          0          0
      dm-2              0.00         0.00         0.00          0          0
      
      • iostat輸出結(jié)果詳解:
        • kB_read/s:表示每秒讀取的數(shù)據(jù)塊數(shù)
        • kB_wrtn/s:表示每秒寫入的數(shù)據(jù)塊數(shù)
        • kB_read:表示讀取的所有塊數(shù)
        • kB_wrtn:表示寫入的所有塊數(shù)
      • 可以通過kB_read/s和kB_wrtn/s的值對磁盤的讀寫性能有基本的了解,如果kB_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優(yōu)化磁盤或者優(yōu)化程序,如果kB_read/s值很大,表示磁盤直接讀取操作很多,可以將讀取的數(shù)據(jù)放入內(nèi)存中進行操作
      • 利用sar評估磁盤性能,通過sar -d可以對系統(tǒng)的磁盤I/O做基本的統(tǒng)計
       sar -d 1 10
      Linux 3.10.0-957.el7.x86_64 (orange)   03/24/2020  _x86_64_    (1 CPU)
      
      10:29:20 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
      10:29:21 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:29:21 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:29:21 PM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:29:21 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:29:21 PM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      
      10:29:21 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
      10:29:22 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:29:22 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:29:22 PM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:29:22 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      10:29:22 PM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
      
      • sar輸出結(jié)果詳解
        • await:表示平均每次設(shè)備I/O操作的等待時間(以ms為單位)
        • svctm:表示平均每次設(shè)備I/O操作的服務(wù)時間(以ms為單位)
        • %util:表示1秒內(nèi)有百分之幾的時間用于I/O操作
      • 磁盤I/O性能,評判的標(biāo)準(zhǔn)為正常情況下svctm應(yīng)該是小于await的值,而svctm的大小和磁盤性能有關(guān),CPU、內(nèi)存的負(fù)荷也會對svctm值造成影響,過多的請求也會間接地導(dǎo)致svctm值的增加
      • await的值大小一般取決于svctm的值和I/O隊列長度以及I/O請求模式,如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊列等待太長,系統(tǒng)上運行的應(yīng)用程序?qū)⒆兟?此時可通過更換更快的硬盤來解決問題
      • %util項的值也是衡量磁盤I/O的一個重要指標(biāo),如果%util接近100%,表示磁盤產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷的在工作,該磁盤可能存在瓶頸.長期下去,勢必影響系統(tǒng)的性能,可以通過優(yōu)化程序或者通過更換更高仁锯、更快的磁盤來解決此問題
    5. 網(wǎng)絡(luò)性能評估

      • 通過ping命令檢查網(wǎng)絡(luò)的連通性
      • 通過netstat -i組合檢測網(wǎng)絡(luò)接口狀況
      • 通過netstat -r組合檢測系統(tǒng)的路由表信息
      • 通過sar -n組合顯示系統(tǒng)的網(wǎng)絡(luò)運行狀態(tài)通過
      • iftop -i ens32可以查看網(wǎng)卡流量
image.png
 - iftop -i ens32詳細(xì)參數(shù):
   - <=:客戶端流入的流量
   - =>:服務(wù)端流出的流量
   - TX:發(fā)送流量
   - RX:接收流量
   - TOTAL:總流量
   - cum:運行iftop到目前時間的總流量
   - peak:流量峰值
   - rates:分別表示過去2s耀找、10s、40s的平均流量
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末业崖,一起剝皮案震驚了整個濱河市野芒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌双炕,老刑警劉巖复罐,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雄家,居然都是意外死亡,警方通過查閱死者的電腦和手機胀滚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門趟济,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咽笼,你說我怎么就攤上這事顷编。” “怎么了剑刑?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵媳纬,是天一觀的道長。 經(jīng)常有香客問我施掏,道長钮惠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任七芭,我火速辦了婚禮素挽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狸驳。我一直安慰自己预明,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布耙箍。 她就那樣靜靜地躺著撰糠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辩昆。 梳的紋絲不亂的頭發(fā)上阅酪,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音,去河邊找鬼遮斥。 笑死峦失,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的术吗。 我是一名探鬼主播尉辑,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼较屿!你這毒婦竟也來了隧魄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤隘蝎,失蹤者是張志新(化名)和其女友劉穎购啄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘱么,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡狮含,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了曼振。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片几迄。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冰评,靈堂內(nèi)的尸體忽然破棺而出映胁,到底是詐尸還是另有隱情,我是刑警寧澤甲雅,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布解孙,位于F島的核電站,受9級特大地震影響抛人,放射性物質(zhì)發(fā)生泄漏弛姜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一妖枚、第九天 我趴在偏房一處隱蔽的房頂上張望娱据。 院中可真熱鬧,春花似錦盅惜、人聲如沸中剩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽结啼。三九已至,卻和暖如春屈芜,著一層夾襖步出監(jiān)牢的瞬間郊愧,已是汗流浹背朴译。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留属铁,地道東北人眠寿。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓盯拱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奢浑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容