日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

性能问题排查

發布時間:2024/3/13 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 性能问题排查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

性能優化

  • 1.硬件
    • 1.1.CPU
    • 1.2.內存
    • 1.3.IO
    • 1.4.網絡
    • 1.5.工具
      • 1.5.1.top
      • 1.5.2.vmstat
      • 1.5.3.iostat
      • 1.5.4.pidstat
  • 2.操作系統
    • 2.1.內核
      • 2.1.1.linux內核參數注釋
      • 2.1.2.兩種修改內核參數方法
      • 2.1.3.內核生產環境優化參數
    • 2.2.limits.conf
  • 3.軟件
    • 3.1.數據庫
    • 3.2.內存泄漏
    • 3.3.死鎖
    • 3.4.程序性能

1.硬件

1.1.CPU

當用戶cpu(us)占用長期超過50%,那么我們就該考慮優化程序算法或者進?升級cpu;

如果近段時間cpu突然異常升高,應該先排查導致升高的原因;

使用vmstat命令,Procs中r(運行中線程)長期大于1。

如果r經常?于4,id經常少于40,表示cpu的負荷很重。

如果bi,bo?期不等于0,表示內存不?。

如果disk經常不等于0,且在b中的隊列?于3,表示io性能不好

1.2.內存

當內存超過服務器內存占用長期超過80%的時候應該考慮升級內存。

1.3.IO

占用IO過高,可以做以下考慮

  • 記錄日志太多
  • 日志打印的內容是否合理
  • 日志級別是否合理
  • 考慮異步寫日志(一般可以解決CPU鋸齒波動),為減少磁 盤IO操作,將日志寫如內存分區;但日志量太大,很容易將內存 寫滿,再考慮將日志進行壓縮。
  • 磁盤占滿
  • 數據庫連接數超限制,導致sleep比較多,sleep任務太多的處理
  • 數據庫IO過高,查詢量大,可以進行讀寫分離(增加讀庫)或者分庫操作,減小磁盤壓力,調優一些buffer參數以降低IO寫的頻率
  • 磁盤IO過高是由于讀寫文件導致的,可以通過raid來減輕壓力
  • 磁盤本身性能不足,升級磁盤
  • 1.4.網絡

    可以通過本地ping服務器端口來查看網絡延遲,或者使用curl模擬請求來查看服務的相應時間。

    1.5.工具

    1.5.1.top

    Linux中的top命令顯示系統上正在運?的進程。它是系統管理員最重要的?具之?。被?泛?于監視服務器的負載。在本篇中,我們會探索top命令的細節。top命令是?個交互命令。在運?top的時候還可以運?很多命令。

    使用方式

    顯示進程信息

    top

    顯示指定的進程信息

    top -p 139 //顯示進程號為139的進程信息,CPU、內存占?率等

    顯示線程信息(線程信息可用于定位發生問題的具體位置)

    shift + h 或 H //顯示線程信息,CPU、內存占?率等,可結合jstack堆棧日志,定位發生問題的具體位置

    示例?:

    Top命令輸出,默認運?時,top命令會顯示如下輸出:

    前???平顯示了不同系統參數的概括,接下來是進程和它們在列中的屬性。

    1)系統運?時間和平均負載:

    top命令的頂部顯示與uptime命令相似的輸出。

    這些字段顯示:

    • 當前時間
    • 系統已運?的時間
    • 當前登錄?戶的數量
    • 相應最近5、10和15分鐘內的平均負載
    • 可以使?’l’命令切換uptime的顯示。

    2)任務:

    第??顯示的是任務或者進程的總結。進程可以處于不同的狀態。這?顯示了全部進程的數量。除

    此之外,還有正在運?、睡眠、停?、僵?進程的數量(僵?是?種進程的狀態)。這些進程概括信息

    可以?’t’切換顯示。

    3)CPU 狀態:

    下??顯示的是CPU狀態。 這?顯示了不同模式下的所占CPU時間的百分?。這些不同的CPU時間

    表示:

    • us, user: 運?(未調整優先級的) ?戶進程的CPU時間sy,system: 運?內核進程的CPU時間

    • ni,niced:運?已調整優先級的?戶進程的CPU時間

    • wa,IO wait: ?于等待IO完成的CPU時間

    • hi:處理硬件中斷的CPU時間

    • si: 處理軟件中斷的CPU時間

    • st:這個虛擬機被hypervisor偷去的CPU時間(譯注:如果當前處于?個hypervisor下的vm,實

      際上hypervisor也是要消耗?部分CPU處理時間的)。

      可以使?’t’命令切換顯示。

    4)內存使?:

    接下來兩?顯示內存使?率,有點像’free’命令。第??是物理內存使?,第??是虛擬內存使?

    (交換空間)。

    物理內存顯示如下:全部可?內存、已使?內存、空閑內存、緩沖內存。相似地:交換部分顯示的

    是:全部、已使?、空閑和緩沖交換空間。

    1.5.2.vmstat

    vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進?監控。是對系統的整體情況進?統計,不?之處是?法對某個進程進?深?分析。怎樣通過vmstat來發現系統中的瓶頸呢?在回答這個問題前,還是讓我們回顧?下Linux中關于虛擬內存相關內容。

    物理內存和虛擬內存區別

    我們知道,直接從物理內存讀寫數據要?從硬盤讀寫數據要快的多,因此,我們希望所有數據的讀取和寫?都在內存完成,?內存是有限的,這樣就引出了物理內存與虛擬內存的概念。

    物理內存就是系統硬件提供的內存??,是真正的內存,相對于物理內存,在linux下還有?個虛擬內存的概念,虛擬內存就是為了滿?物理內存的不??提出的策略,它是利?磁盤空間虛擬出的?塊邏輯內存,?作虛擬內存的磁盤空間被稱為交換空間Swap Space)。

    ?法

    vmstat [-a] [-n] [-S unit] [delay [ count]]

    vmstat [-s] [-n] [-S unit]

    vmstat [-m] [-n] [delay [ count]]

    vmstat [-d] [-n] [delay [ count]]

    vmstat [-p disk partition] [-n] [delay [ count]]

    vmstat [-f]

    vmstat [-V]

    -a:顯示活躍和?活躍內存

    -f:顯示從系統啟動?今的fork數量 。

    -m:顯示slabinfo

    -n:只在開始時顯示?次各字段名稱。

    -s:顯示內存相關統計信息及多種系統活動數量。

    delay:刷新時間間隔。如果不指定,只顯示?條結果。

    count:刷新次數。如果不指定刷新次數,但指定了刷新時間間隔,這時刷新次數為?窮。

    -d:顯示磁盤相關統計信息。

    -p:顯示指定磁盤分區統計信息

    -S:使?指定單位顯示。參數有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節

    (byte)。默認單位為K(1024 bytes)

    -V:顯示vmstat版本信息。

    示例?:

    每3秒輸出?條結果

    字段說明:

    Procs(進程):

    r: 運?隊列中進程數量,這個值也可以判斷是否需要增加CPU。(?期?于1)

    b: 等待IO的進程數量

    Memory(內存):

    swpd: 使?虛擬內存??

    注意:如果swpd的值不為0,但是SI,SO的值?期為0,這種情況不會影響系統性能。

    free: 空閑物理內存??

    buff: ?作緩沖的內存??

    cache: ?作緩存的內存??

    注意:如果cache的值?的時候,說明cache處的?件數多,如果頻繁訪問到的?件都能被cache處,那

    么磁盤的讀IO bi會?常?。

    Swap

    si: 每秒從交換區寫到內存的??,由磁盤調?內存

    so: 每秒寫?交換區的內存??,由內存調?磁盤

    注意:內存夠?的時候,這2個值都是0,如果這2個值?期?于0時,系統性能會受到影響,磁盤IO和

    CPU資源都會被消耗。有些朋友看到空閑內存(free)很少的或接近于0時,就認為內存不夠?了,不能

    光看這?點,還要結合si和so,如果free很少,但是si和so也很少(?多時候是0),那么不?擔?,系

    統性能這時不會受到影響的。

    IO:(現在的Linux版本塊的??為1kb)

    bi: 每秒讀取的塊數

    bo: 每秒寫?的塊數

    注意:隨機磁盤讀寫的時候,這2個值越?(如超出1024k),能看到CPU在IO等待的值也會越?。

    系統:

    in: 每秒中斷數,包括時鐘中斷。

    cs: 每秒上下?切換數。

    注意:上?2個值越?,會看到由內核消耗的CPU時間會越?。

    CPU(以百分?表示):us: ?戶進程執?時間百分?(user time)

    注意: us的值?較?時,說明?戶進程消耗的CPU時間多,但是如果?期超50%的使?,那么我們就該

    考慮優化程序算法或者進?加速。

    sy: 內核系統進程執?時間百分?(system time)

    注意:sy的值?時,說明系統內核消耗的CPU資源多,這并不是良性表現,我們應該檢查原因。

    wa: IO等待時間百分?

    注意:wa的值?時,說明IO等待?較嚴重,這可能由于磁盤?量作隨機訪問造成,也有可能磁盤出現

    瓶頸(塊操作)。

    備注:

    如果r經常?于4,id經常少于40,表示cpu的負荷很重。

    如果bi,bo?期不等于0,表示內存不?。

    如果disk經常不等于0,且在b中的隊列?于3,表示io性能不好。

    Linux在具有?穩定性、可靠性的同時,具有很好的可伸縮性和擴展性,能夠針對不同的應?和硬件環

    境調整,優化出滿?當前應?需要的最佳性能。因此企業在維護Linux系統、進?系統調優時,了解系

    統性能分析?具是?關重要的。

    示例?:

    顯示活躍和?活躍內存

    使?-a選項顯示活躍和?活躍內存時,所顯示的內容除增加inact和active外,其他顯示內容與例?1相同。

    字段說明:

    Memory(內存):

    inact: ?活躍內存??(當使?-a選項時顯示)

    active: 活躍的內存??(當使?-a選項時顯示)

    示例三:

    顯示從系統啟動?今的fork數量

    vmstat -f 【 linux下創建進程的系統調?是fork】

    說明**😗* 信息是從/proc/stat中的processes字段?取得的

    示例四:

    查看詳細信息

    vmstat -s 【顯示內存相關統計信息及多種系統活動數量】


    說明:這些vvmstat的分別來?于/proc/meminfo,/proc/stat和/proc/vmstat

    示例五:

    vmstat -d 【查看磁盤的讀寫】

    說明:這些信息主要來?于/proc/diskstats.

    示例六:

    查看/dev/vda1磁盤的讀/寫

    vmstat -p /dev/vda1 【顯示指定磁盤分區統計信息】

    說明:這些信息主要來?于/proc/diskstats.

    reads:來?于這個分區的讀的次數。

    read sectors:來?于這個分區的讀扇區的次數。

    writes:來?于這個分區的寫的次數。

    requested writes:來?于這個分區的寫請求次數。

    1.5.3.iostat

    iostat:I/O statistics(輸?/輸出統計)的縮寫,iostat?具將對系統的磁盤操作活動進?監視。它

    的特點是匯報磁盤活動統計情況,同時也會匯報出CPU使?情況。iostat也有?個弱點,就是它不能對

    某個進程進?深?分析,僅對系統的整體情況進?分析。

    iostat 安裝

    # iostat屬于sysstat軟件包。可以直接安裝。 yum install sysstat

    示例一

    單獨執?iostat,顯示的結果為從系統開機到當前執?時刻的統計信息。

    以上輸出中,包含三部分:選項 說明

    第??:最上?指示系統版本、主機名和當前?期

    avg-cpu:總體cpu使?情況統計信息,對于多核cpu,這?為所有cpu的平均值

    Device:各磁盤設備的IO統計信息

    avg-cpu中各列參數含義如下:

    %user:CPU在?戶態執?進程的時間百分?。

    %nice:CPU在?戶態模式下,?于nice操作,所占?CPU總時間的百分?

    %system:CPU處在內核態執?進程的時間百分?

    %iowait:CPU?于等待I/O操作占?CPU總時間的百分?

    %steal:管理程序(hypervisor)為另?個虛擬進程提供服務?等待虛擬CPU的百分?

    %idle:CPU空閑時間百分?

  • 若 %iowait 的值過?,表示硬盤存在I/O瓶頸

  • 若 %idle 的值?但系統響應慢時,有可能是CPU等待分配內存,此時應加?內存容量

  • 若 %idle 的值持續低于1,則系統的CPU處理能?相對較低,表明系統中最需要解決的資源是 CPU

  • Device:設備名稱

    tps:每秒向磁盤設備請求數據的次數,包括讀、寫請求,為rtps與wtps的和。出于效率考慮,每?次IO下發后并不是?即處理請求,?是將請求合并(merge),這?tps指請求合并后的請求計數。

    kB_read/s:每秒從設備(drive expressed)讀取的數據量;

    kB_wrtn/s:每秒向設備(drive expressed)寫?的數據量;

    kB_read:讀取的總數據量;

    kB_wrtn:寫?的總數量數據量;

    Device中各列參數含義如下:

    我們可以使?-c選項單獨顯示avg-cpu部分的結果,使?-d選項單獨顯示Device部分的信息。

    定時顯示所有信息# 【每隔2秒刷新顯示,且顯示3次】

    iostat 2 3

    顯示指定磁盤信息

    iostat -d /dev/sda

    顯示ttycpu信息

    iostat -t

    M為單位顯示所有信息

    iostat -m

    查看設備使?率(%util)、響應時間(await

    # 【-d 顯示磁盤使?情況,-x 顯示詳細信息】iostat -d -x -k 1 10

    【注意】一般%util大于70%,I/O壓力就比較大,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。

    1.5.4.pidstat

    pidstat是sysstat?具的?個命令,?于監控全部或指定進程的cpu、內存、線程、設備IO等系統資

    源的占?情況。pidstat?次運?時顯示?系統啟動開始的各項統計信息,之后運?pidstat將顯示?上

    次運?該命令以后的統計信息。?戶可以通過指定統計的次數和時間來獲得所需的統計信息。

    pidstat 安裝

    pidstat 是sysstat軟件套件的?部分,sysstat包含很多監控linux系統狀態的?具,它能夠從?多數

    linux發?版的軟件源中獲得。

    在Debian/Ubuntu系統中可以使?下?的命令來安裝:

    apt-get install sysstat

    CentOS/Fedora/RHEL版本的linux中則使?下?的命令:

    yum install sysstat

    ?法

    pidstat [ 選項 ] [ <時間間隔> ] [ <次數> ]

    常?的參數:

    • -u:默認的參數,顯示各個進程的cpu使?統計

    • -r:顯示各個進程的內存使?統計

    • -d:顯示各個進程的IO使?情況

    • -p:指定進程號

    • -w:顯示每個進程的上下?切換情況

    • -t:顯示選擇任務的線程的統計信息外的額外信息

    • -T { TASK | CHILD | ALL }

      這個選項指定了pidstat監控的。TASK表示報告獨?的task,CHILD關鍵字表示報告進程下所有線程統計信息。ALL表示報告獨?的task和task下?的所有線程。

      注意:task和?線程的全局的統計信息和pidstat選項?關。這些統計信息不會對應到當前的統計間隔,這些統計信息只有在?線程kill或者完成的時候才會被收集。

    • -V:版本號

    • -h:在??上顯示了所有活動,這樣其他程序可以容易解析。

    • -I:在SMP環境,表示任務的CPU使?率/內核數量

    • -l:顯示命令名和所有參數

    • 示例?:

    查看所有進程的 CPU 使?情況( -u -p ALL)

    pidstat pidstat -u -p ALL

    pidstat 和 pidstat -u -p ALL 是等效的。

    pidstat 默認顯示了所有進程的cpu使?率。

    詳細說明

    PID:進程ID

    • %usr:進程在?戶空間占?cpu的百分?
    • %system:進程在內核空間占?cpu的百分?
    • %guest:進程在虛擬機占?cpu的百分?
    • %CPU:進程占?cpu的百分?
    • CPU:處理進程的cpu編號
    • Command:當前進程對應的命令

    示例二:

    內存使?情況統計(-r)

    pidstat -r

    使?-r選項,pidstat將顯示各活動進程的內存使?統計:

    • PID:進程標識符
    • Minflt/s:任務每秒發?的次要錯誤,不需要從磁盤中加載?
    • Majflt/s:任務每秒發?的主要錯誤,需要從磁盤中加載?
    • VSZ:虛擬地址??,虛擬內存的使?KB
    • RSS:常駐集合??,?交換區五?內存使?KB
    • Command:task命令名

    示例四:

    顯示各個進程的IO使?情況(-d)

    報告IO統計顯示以下信息:

    • PID:進程id
    • kB_rd/s:每秒從磁盤讀取的KBkB_wr/s:每秒寫?磁盤KB
    • kB_ccwr/s:任務取消的寫?磁盤的KB。當任務截斷臟的pagecache的時候會發?。
    • COMMAND:task的命令名

    示例五:

    顯示每個進程的上下?切換情況(-w)

    • PID:進程id
    • Cswch/s:每秒主動任務上下?切換數量
    • Nvcswch/s:每秒被動任務上下?切換數量
    • Command:命令名

    示例六:

    顯示選擇任務的線程的統計信息外的額外信息 (-t)

    TGID:主線程的表示

    TID:線程id

    • %usr:進程在?戶空間占?cpu的百分?
    • %system:進程在內核空間占?cpu的百分?
    • %guest:進程在虛擬機占?cpu的百分?
    • %CPU:進程占?cpu的百分?
    • CPU:處理進程的cpu編號
    • Command:當前進程對應的命令

    2.操作系統

    2.1.內核

    inux在系統運行時修改內核參數(/proc/sys與/etc/sysctl.conf),而不需要重新引導系統,這個功能是通過/proc虛擬文件系統實現的。

    在/proc/sys目錄下存放著大多數的內核參數,并且設計成可以在系統運行的同時進行更改, 可以通過更改/proc/sys中內核參數對應的文件達到修改內核參數的目的(修改過后,保存配置文件就馬上自動生效),不過重新啟動機器后之前修改的參數值會失效,所以只能是一種臨時參數變更方案。(適合調試內核參數優化值的時候使用,如果設置值有問題,重啟服務器還原原來的設置參數值了。簡單方便。)

    但是如果調試內核參數優化值結束后,需要永久保存參數值,就要通過修改/etc/sysctl.conf內的內核參數來永久保存更改。但只是修改sysctl文件內的參數值,確認保存修改文件后,設定的參數值并不會馬上生效,如果想使參數值修改馬上生效,并且不重啟服務器,可以執行下面的命令:

    #sysctl –p

    下面介紹一下/proc/sys下內核文件與配置文件sysctl.conf中變量的對應關系:

    由于可以修改的內核參數都在/proc/sys目錄下,所以sysctl.conf的變量名省略了目錄的前面部分(/proc/sys)。

    即將/proc/sys中的文件轉換成sysctl中的變量依據下面兩個簡單的規則:

    1.去掉前面部分/proc/sys

    2.將文件名中的斜杠變為點

    這兩條規則可以將/proc/sys中的任一文件名轉換成sysctl中的變量名。

    例如:

    /proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward

    /proc/sys/kernel/hostname =》 kernel.hostname

    可以使用下面命令查詢所有可修改的變量名

    # sysctl –a

    2.1.1.linux內核參數注釋

    以下表格中紅色字體為常用優化參數

    根據參數文件所處目錄不同而進行分表整理

    下列文件所在目錄:/proc/sys/net/ipv4/

    名稱默認值建議值描述
    tcp_syn_retries51對于一個新建連接,內核要發送多少個 SYN 連接請求才決定放棄。不應該大于255,默認值是5,對應于180秒左右時間。。(對于大負載而物理通信良好的網絡而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連接,對進來的連接,是由tcp_retries1決定的)
    tcp_synack_retries51對于遠端的連接請求SYN,內核會發送SYN + ACK數據報,以確認收到上一個 SYN連接請求包。這是所謂的三次握手( threeway handshake)機制的第二個步驟。這里決定內核在放棄連接之前所送出的 SYN+ACK 數目。不應該大于255,默認值是5,對應于180秒左右時間。
    tcp_keepalive_time7200600TCP發送keepalive探測消息的間隔時間(秒),用于確認TCP連接是否有效。防止兩邊建立連接但不發送數據的攻擊。
    tcp_keepalive_probes93TCP發送keepalive探測消息的間隔時間(秒),用于確認TCP連接是否有效。
    tcp_keepalive_intvl7515探測消息未獲得響應時,重發該消息的間隔時間(秒)。默認值為75秒。 (對于普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類服務器需要改小該值,15是個比較合適的值)
    tcp_retries133放棄回應一個TCP連接請求前﹐需要進行多少次重試。RFC規定最低的數值是3
    tcp_retries2155在丟棄激活(已建立通訊狀況)的TCP連接之前﹐需要進行多少次重試。默認值為15,根據RTO的值來決定,相當于13-30分鐘(RFC1122規定,必須大于100秒).(這個值根據目前的網絡設置,可以適當地改小,我的網絡內修改為了5)
    tcp_orphan_retries73在近端丟棄TCP連接之前﹐要進行多少次重試。默認值是7個﹐相當于 50秒 - 16分鐘﹐視 RTO 而定。如果您的系統是負載很大的web服務器﹐那么也許需要降低該值﹐這類 sockets 可能會耗費大量的資源。另外參的考tcp_max_orphans。(事實上做NAT的時候,降低該值也是好處顯著的,我本人的網絡環境中降低該值為3)
    tcp_fin_timeout602對于本端斷開的socket連接,TCP保持在FIN-WAIT-2狀態的時間。對方可能會斷開連接或一直不結束連接或不可預料的進程死亡。默認值為 60 秒。
    tcp_max_tw_buckets18000036000系統在同時所處理的最大 timewait sockets 數目。如果超過此數的話﹐time-wait socket 會被立即砍除并且顯示警告信息。之所以要設定這個限制﹐純粹為了抵御那些簡單的 DoS 攻擊﹐不過﹐如果網絡條件需要比默認值更多﹐則可以提高它(或許還要增加內存)。(事實上做NAT的時候最好可以適當地增加該值)
    tcp_tw_recycle01打開快速 TIME-WAIT sockets 回收。除非得到技術專家的建議或要求﹐請不要隨意修改這個值。(做NAT的時候,建議打開它)
    tcp_tw_reuse01表示是否允許重新應用處于TIME-WAIT狀態的socket用于新的TCP連接(這個對快速重啟動某些服務,而啟動后提示端口已經被使用的情形非常有幫助)
    tcp_max_orphans819232768系統所能處理不屬于任何進程的TCP sockets最大數量。假如超過這個數量﹐那么不屬于任何進程的連接會被立即reset,并同時顯示警告信息。之所以要設定這個限制﹐純粹為了抵御那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人為的降低這個限制。如果內存大更應該增加這個值。(這個值Redhat AS版本中設置為32768,但是很多防火墻修改的時候,建議該值修改為2000)
    tcp_abort_on_overflow00當守護進程太忙而不能接受新的連接,就象對方發送reset消息,默認值是false。這意味著當溢出的原因是因為一個偶然的猝發,那么連接將恢復狀態。只有在你確信守護進程真的不能完成連接請求時才打開該選項,該選項會影響客戶的使用。(對待已經滿載的sendmail,apache這類服務的時候,這個可以很快讓客戶端終止連接,可以給予服務程序處理已有連接的緩沖機會,所以很多防火墻上推薦打開它)
    tcp_syncookies01只有在內核編譯時選擇了CONFIG_SYNCOOKIES時才會發生作用。當出現syn等候隊列出現溢出時象對方發送syncookies。目的是為了防止syn flood攻擊。
    tcp_stdurg00使用 TCP urg pointer 字段中的主機請求解釋功能。大部份的主機都使用老舊的 BSD解釋,因此如果您在 Linux打開它﹐或會導致不能和它們正確溝通。
    tcp_max_syn_backlog102416384對于那些依然還未獲得客戶端確認的連接請求﹐需要保存在隊列中最大數目。對于超過 128Mb 內存的系統﹐默認值是 1024 ﹐低于 128Mb 的則為 128。如果服務器經常出現過載﹐可以嘗試增加這個數字。警告﹗假如您將此值設為大于 1024﹐最好修改include/net/tcp.h里面的TCP_SYNQ_HSIZE﹐以保持TCP_SYNQ_HSIZE*16(SYN Flood攻擊利用TCP協議散布握手的缺陷,偽造虛假源IP地址發送大量TCP-SYN半打開連接到目標系統,最終導致目標系統Socket隊列資源耗盡而無法接受新的連接。為了應付這種攻擊,現代Unix系統中普遍采用多連接隊列處理的方式來緩沖(而不是解決)這種攻擊,是用一個基本隊列處理正常的完全連接應用(Connect()和Accept() ),是用另一個隊列單獨存放半打開連接。這種雙隊列處理方式和其他一些系統內核措施(例如Syn-Cookies/Caches)聯合應用時,能夠比較有效的緩解小規模的SYN Flood攻擊(事實證明)
    tcp_window_scaling11該文件表示設置tcp/ip會話的滑動窗口大小是否可變。參數值為布爾值,為1時表示可變,為0時表示不可變。tcp/ip通常使用的窗口最大可達到 65535 字節,對于高速網絡,該值可能太小,這時候如果啟用了該功能,可以使tcp/ip滑動窗口大小增大數個數量級,從而提高數據傳輸的能力(RFC 1323)。(對普通地百M網絡而言,關閉會降低開銷,所以如果不是高速網絡,可以考慮設置為0)
    tcp_timestamps11Timestamps 用在其它一些東西中﹐可以防范那些偽造的sequence 號碼。一條1G的寬帶線路或許會重遇到帶 out-of-line數值的舊sequence 號碼(假如它是由于上次產生的)。Timestamp 會讓它知道這是個 ‘舊封包’。(該文件表示是否啟用以一種比超時重發更精確的方法(RFC 1323)來啟用對 RTT 的計算;為了實現更好的性能應該啟用這個選項。)
    tcp_sack11使用 Selective ACK﹐它可以用來查找特定的遺失的數據報— 因此有助于快速恢復狀態。該文件表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高性能(這樣可以讓發送者只發送丟失的報文段)。(對于廣域網通信來說這個選項應該啟用,但是這會增加對 CPU 的占用。)
    tcp_fack11打開FACK擁塞避免和快速重傳功能。(注意,當tcp_sack設置為0的時候,這個值即使設置為1也無效)[這個是TCP連接靠譜的核心功能]
    tcp_dsack11允許TCP發送"兩個完全相同"的SACK。
    tcp_ecn00TCP的直接擁塞通告功能。
    tcp_reordering36TCP流中重排序的數據報最大數量。 (一般有看到推薦把這個數值略微調整大一些,比如5)
    tcp_retrans_collapse10對于某些有bug的打印機提供針對其bug的兼容性。(一般不需要這個支持,可以關閉它)
    tcp_wmem**:*min**default**max***409616384131072819213107216777216發送緩存設置min:為TCP socket預留用于發送緩沖的內存最小值。每個tcp socket都可以在建議以后都可以使用它。默認值為4096(4K)。default:為TCP socket預留用于發送緩沖的內存數量,默認情況下該值會影響其它協議使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默認值為16384(16K)。max: 用于TCP socket發送緩沖的內存最大值。該值不會影響net.core.wmem_max,"靜態"選擇參數SO_SNDBUF則不受該值影響。默認值為131072(128K)。(對于服務器而言,增加這個參數的值對于發送數據很有幫助,在我的網絡環境中,修改為了51200 131072 204800)
    tcp_rmem**:*min**default**max***4096873801747603276813107216777216接收緩存設置同tcp_wmem
    tcp_mem**:*min**default**max***根據內存計算7864321048576 1572864low:當TCP使用了低于該值的內存頁面數時,TCP不會考慮釋放內存。即低于此值沒有內存壓力。(理想情況下,這個值應與指定給 tcp_wmem 的第 2 個值相匹配 - 這第 2 個值表明,最大頁面大小乘以最大并發請求數除以頁大小 (131072 * 300 / 4096)。 )pressure:當TCP使用了超過該值的內存頁面數量時,TCP試圖穩定其內存使用,進入pressure模式,當內存消耗低于low值時則退出pressure狀態。(理想情況下這個值應該是 TCP 可以使用的總緩沖區大小的最大值 (204800 * 300 / 4096)。 )high:允許所有tcp sockets用于排隊緩沖數據報的頁面量。(如果超過這個值,TCP 連接將被拒絕,這就是為什么不要令其過于保守 (512000 * 300 / 4096) 的原因了。 在這種情況下,提供的價值很大,它能處理很多連接,是所預期的 2.5 倍;或者使現有連接能夠傳輸 2.5 倍的數據。 我的網絡里為192000 300000 732000)一般情況下這些值是在系統啟動時根據系統內存數量計算得到的。
    tcp_app_win3131保留max(window/2^tcp_app_win, mss)數量的窗口由于應用緩沖。當為0時表示不需要緩沖。
    tcp_adv_win_scale22計算緩沖開銷bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale BOOLEAN>0)
    tcp_low_latency00允許 TCP/IP 棧適應在高吞吐量情況下低延時的情況;這個選項一般情形是的禁用。(但在構建Beowulf 集群的時候,打開它很有幫助)
    tcp_westwood00啟用發送者端的擁塞控制算法,它可以維護對吞吐量的評估,并試圖對帶寬的整體利用情況進行優化;對于 WAN通信來說應該啟用這個選項。
    tcp_bic00為快速長距離網絡啟用 Binary Increase Congestion;這樣可以更好地利用以 GB 速度進行操作的鏈接;對于WAN 通信應該啟用這個選項。
    ip_forward0NAT必須開啟IP轉發支持,把該值寫1
    ip_local_port_range:minmax3276861000102465000表示用于向外連接的端口范圍,默認比較小,這個范圍同樣會間接用于NAT表規模。
    ip_conntrack_max6553565535系統支持的最大ipv4連接數,默認65536(事實上這也是理論最大值),同時這個值和你的內存大小有關,如果內存128M,這個值最大8192,1G以上內存這個值都是默認65536

    所處目錄/proc/sys/net/ipv4/netfilter/

    文件需要打開防火墻才會存在

    名稱默認值建議值描述
    ip_conntrack_max6553665536系統支持的最大ipv4連接數,默認65536(事實上這也是理論最大值),同時這個值和你的內存大小有關,如果內存128M,這個值最大8192,1G以上內存這個值都是默認65536,這個值受/proc/sys/net/ipv4/ip_conntrack_max限制
    ip_conntrack_tcp_timeout_established432000180已建立的tcp連接的超時時間,默認432000,也就是5天。影響:這個值過大將導致一些可能已經不用的連接常駐于內存中,占用大量鏈接資源,從而可能導致NAT ip_conntrack: table full的問題。建議:對于NAT負載相對本機的 NAT表大小很緊張的時候,可能需要考慮縮小這個值,以盡早清除連接,保證有可用的連接資源;如果不緊張,不必修改
    ip_conntrack_tcp_timeout_time_wait120120time_wait狀態超時時間,超過該時間就清除該連接
    ip_conntrack_tcp_timeout_close_wait6060close_wait狀態超時時間,超過該時間就清除該連接
    ip_conntrack_tcp_timeout_fin_wait120120fin_wait狀態超時時間,超過該時間就清除該連接

    文件所處目錄/proc/sys/net/core/

    名稱默認值建議值描述
    netdev_max_backlog102416384每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目,對重負載服務器而言,該值需要調高一點。
    somaxconn12816384用來限制監聽(LISTEN)隊列最大數據包的數量,超過這個數量就會導致鏈接超時或者觸發重傳機制。web應用中listen函數的backlog默認會給我們內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認為511,所以有必要調整這個值。對繁忙的服務器,增加該值有助于網絡性能
    wmem_default129024129024默認的發送窗口大小(以字節為單位)
    rmem_default129024129024默認的接收窗口大小(以字節為單位)
    rmem_max129024873200最大的TCP數據接收緩沖
    wmem_max129024873200最大的TCP數據發送緩沖

    2.1.2.兩種修改內核參數方法

    1、使用echo value方式直接追加到文件里如echo “1” >/proc/sys/net/ipv4/tcp_syn_retries,但這種方法設備重啟后又會恢復為默認值

    2、把參數添加到/etc/sysctl.conf中,然后執行sysctl -p使參數生效,永久生效

    2.1.3.內核生產環境優化參數

    這兒所列參數是生產中常用的參數:

    net.ipv4.tcp_syn_retries = 1

    net.ipv4.tcp_synack_retries = 1

    net.ipv4.tcp_keepalive_time = 600

    net.ipv4.tcp_keepalive_probes = 3

    net.ipv4.tcp_keepalive_intvl =15

    net.ipv4.tcp_retries2 = 5

    net.ipv4.tcp_fin_timeout = 2

    net.ipv4.tcp_max_tw_buckets = 36000

    net.ipv4.tcp_tw_recycle = 1

    net.ipv4.tcp_tw_reuse = 1

    net.ipv4.tcp_max_orphans = 32768

    net.ipv4.tcp_syncookies = 1

    net.ipv4.tcp_max_syn_backlog = 16384

    net.ipv4.tcp_wmem = 8192 131072 16777216

    net.ipv4.tcp_rmem = 32768 131072 16777216

    net.ipv4.tcp_mem = 786432 1048576 1572864

    net.ipv4.ip_local_port_range = 1024 65000

    net.ipv4.ip_conntrack_max = 65536

    net.ipv4.netfilter.ip_conntrack_max=65536

    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

    net.core.somaxconn = 16384

    net.core.netdev_max_backlog = 16384

    對比網上其他人的生產環境優化參數,需要優化的參數基本差不多,只是值有相應的變化。具體優化值要參考應用場景,這兒所列只是常用優化參數,是否適合,可在上面查看該參數描述,理解后,再根據自己生產環境而設。

    其它相關linux內核參數調整文章:

    Linux內核參數優化

    http://flandycheng.blog.51cto.com/855176/476769

    優化linux的內核參數來提高服務器并發處理能力

    http://www.ha97.com/4396.html

    nginx做web服務器linux內核參數優化

    http://blog.csdn.net/force_eagle/article/details/6725243

    2.2.limits.conf

    imits.conf文件限制著用戶可以使用的最大文件數,最大線程,最大內存等資源使用量

    一、修改最大連接數
    1、查看當前文件描述符的限制數目的命令:
    ulimit -n
    2、修改文件描述符的限制數目
    2.1 臨時改變當前會話:
    ulimit -n 65536
    2.2 永久變更需要下面兩個步驟:

  • 修改/etc/security/limits.conf 文件(注意帶著前面的*號),如下:
    vi /etc/security/limits.conf
    * soft nofile 570000
    * hard nofile 570000
    保存退出后重新登錄,其最大文件描述符已經被永久更改了;但是需要經過下面的步驟2)之后才能生效。
  • 重新加載庫:
    打開文件:
    vi /etc/pam.d/login
    在最后加上:
    session required /lib64/security/pam_limits.so
    即可
  • 3.查看和修改系統的最大打開文件限制
    位置: /proc/sys/fs/file-max
    查看命令:
    cat /proc/sys/fs/file-max
    修改:
    通過vi修改 /etc/sysctl.conf 文件,在該文件中加上:

    fs.file-max=2000000
    可以在令針對此參數 的修改一直生效,在該文件中,修改完后執行命令:

    sysctl -p

    使修改立即生效,而無需重啟;

    可使用下面兩條命令驗證一下修改是否成功:

    cat /proc/sys/fs/file-max

    或者

    sysctl fs.file-max

    4.修改nr_open
    通過vi修改 /etc/sysctl.conf,在該文件中加上:
    fs.nr_open = 2000000
    可以在令針對此參數 的修改一直生效,在該文件中,修改完后執行命令:
    sysctl -p
    使修改立即生效,而無需重啟;

    注意:
    a. 所有進程打開的文件描述符數不能超過/proc/sys/fs/file-max

    b. 單個進程打開的文件描述符數不能超過user limit中nofile的soft limit

    c. nofile的soft limit不能超過其hard limit

    d. nofile的hard limit不能超過/proc/sys/fs/nr_open
    ---------------------
    作者:逍遙子_
    原文:https://blog.csdn.net/houjixin/article/details/12578655

    3.軟件

    3.1.數據庫

    觀察指標是數據庫cpu、內存、和IO情況是否過高。

    數據庫壓力大的表現為,sql查詢返回時間長,并且失敗率增加。

    3.2.內存泄漏

    使用jmap命令dump當前程序內存快照,使用mat進行內存泄漏分析

    jmap -dump:live,format=b,file=filename.hprof pid


    Histogram:列出每個class的實例數量

    Dominator Tree(支配樹):列出每個對象(Object instance)與其引用關系的樹狀結構,還包含了占有多大內存,所占百分比

    • Shallow Heap:對象本身占用內存大小,不包括它引用的對象
    • Retained Heap:當前對象大小+當前對象可直接或間接引用到的對象的大小總和

    3.3.死鎖

  • 使用jstack命令獲得當前線程快照,使用jconsole檢測是否存在明顯的死鎖現象。

  • 使用jstack按一定頻率收集線程運行快照,分析其中是否有長時間持續運行的線程,再根據具體的業務情況分析是否屬于正常情況。

    以下幾種會造成線程長時間處于等待狀態,雖然不屬于死鎖,但也是需要改進的地方(可以設置超時時間)。

  • 等待分布式鎖
  • 等待磁盤IO
  • 等待數據庫返回
  • 等待Http請求返回
  • 3.4.程序性能

    軟件本身就有非常復雜的業務處理和io,應該考慮按功能拆分服務或者集群部署來減輕壓力

    總結

    以上是生活随笔為你收集整理的性能问题排查的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲天堂2014| 国产网址 | 国产三级小视频 | 婷婷色在线视频 | 欧美自拍偷拍一区二区 | 欧美激情国产日韩精品一区18 | 久久逼逼 | 黄色在线观看av | 激情久久五月天 | 九一国产在线 | 日本中文字幕成人 | 成年人网站免费观看 | 影音先锋中文字幕一区 | 这里只有精品6 | 成人性做爰aaa片免费看不忠 | 亚洲特黄一级片 | www.天天综合 | 免费毛片网站 | 久久黄页 | 精品xxx| 国产视频手机在线观看 | 久草视频资源 | 国产一区 在线播放 | 亚洲 欧美 自拍偷拍 | 日本黄色xxxx | 日本精品一区二区视频 | 成人手机在线播放 | 人人干人人干人人干 | 免费看a网站 | 久久在草| 福利视频午夜 | 久久久久成人网站 | 欧洲视频在线观看 | 国产一区亚洲 | 伊人一级 | 欧洲美女粗暴牲交免费观看 | av一卡| 国产一二区在线观看 | 亚洲视频小说 | 边吃奶边添下面好爽 | 亚洲精品喷潮一区二区三区 | 国产精品久久久久久久久久久久久久久久久 | 国产女女 | 波多野结衣亚洲一区 | 一区二区三区国产在线 | 国产自偷自拍 | 黄色理论片 | 中文天堂网 | 国产亚洲视频在线观看 | 久久久久亚洲av无码a片 | 在线免费观看高清视频 | 亚洲精品视频在线观看视频 | 亚洲精品视频免费观看 | 影音先锋国产在线 | 亚洲黄网站在线观看 | 超碰人人插| 1024国产视频 | www日本黄色 | 韩国美女啪啪 | 丁香六月婷婷综合 | 日韩精品一二三四 | 亚洲最大激情网 | 国产在线视频第一页 | 五月婷婷导航 | 欧美一区二区三区免 | 九九爱视频 | 色人阁五月| 草女人视频 | 狠狠操在线播放 | 天天躁日日躁狠狠躁av麻豆男男 | 午夜精品久久久久久久蜜桃 | 岛国片在线播放 | 黄色av影视 | 午夜性福利视频 | 日韩中文av在线 | 久草av在线播放 | 久久精品男人的天堂 | 伊人影院在线观看 | 人人艹视频 | 日本韩国在线播放 | 亚洲爱爱片 | 亚洲免费观看高清完整版在线 | 一区二区视| 欧美69精品久久久久久不卡 | 一级香蕉视频在线观看 | 国产精品成人一区二区三区电影毛片 | 黄色91 | 久久激情婷婷 | 尤物一区 | 农村末发育av片一区二区 | 毛片av在线播放 | 成人午夜在线免费观看 | 在线亚洲网站 | 91黄色在线观看 | 久久黄色精品视频 | 国产乱淫av免费 | 肉丝袜脚交视频一区二区 | 末路1997全集免费观看完整版 | 国产精品爽爽久久 |