一、Linux單主機的負載linux
負載均衡——前提是把一臺服務器的性能發揮到極致。算法
經過測量找出系統的瓶頸,而後消除瓶頸,發揮性能。數據庫
尋找瓶頸的基本流程緩存
查看瓶頸負載(load average):top或者uptime檢查平均負載,若平均負載很低,可是系統吞吐量沒法提升,應該檢查軟件設置是否異常,檢查網絡和遠程主機是否存在故障。服務器
確認CPU、I/O有無瓶頸:若平均負載很高,就須要在CPU或I/O中尋找緣由。sar或vmstat能夠查看CPU、I/O等待率隨着時間的推移狀況,能夠做爲參考。網絡
一、CPU太高,查找流程:多線程
確認是用戶程序處理的瓶頸,仍是系統程序的緣由。用top或sar確認。負載均衡
再經過ps查看可見進程的狀態和CPU使用時間等,肯定致使問題的進程。分佈式
進一步尋找緣由,能夠經過strace跟蹤,或oprofile進行剖測,以肯定瓶頸所在。性能
通常來講緣由以下:
磁盤或內存容量等其餘部分沒有稱爲瓶頸,即處於理想狀態;
程序失控,須要消耗過多的CPU。
若是是前者,而且吞吐量有問題,能夠採起增長服務器、改善程序邏輯和算法的方式。後者的狀況要去除故障,避免程序失控。
二、I/O負載太高,其緣由多半是程序發出的I/O請求過多致使負載太高,或是發生頁面交換致使頻繁訪問磁盤。應經過sar或vmstat確認交換區狀態,以找出緣由。
若是是發生頁面交換的狀況,應該從如下幾點着手調查:
用ps確認是否有進程消耗了大量的內存;
若是因爲程序故障形成內存消耗過大,應改進程序;
若是因爲內存安裝不足,就要增長內存。沒法增長內存時,考慮分佈式。
若是沒有發生交換,並且磁盤I/O頻繁的狀況,多是用於緩存的內存不足。根據服務器數量和可增長的內存量,按下面的應對方法:
若是經過增長內存能夠擴大緩存,就增長內存;
若是增長內存還不夠用,就考慮分散存儲數據,或增長緩存服務器等。固然,改進程序減小I/O頻率也是一種方法。
操做系統調優,就是找出負載緣由並去除之。
二、兩種負載與Web應用程序
兩類負載:CPU負載和I/O負載
linux中top結果包含有load average的數字,即平均負載,平均負載值通常都是在定時器中斷髮生時計算的。表明的意思就是單位時間中處於等待狀態的任務數,亦即:
等待賦予CPU的執行權限的進程;
等待磁盤I/O完成的進程。
因此平均負載是兩種負載綜合的結果,單憑該數字還沒法判斷是哪一種負載高。
三、平均負載以後是CPU使用率和I/O等待率
經過sar查看CPU使用率和I/O等待率:%user是CPU在用戶模式下的使用率,%system爲系統模式下的使用率。平均負載高,而且此處的CPU使用率也高的話,就能夠判斷出進程等待的高負載緣由就是CPU資源不足。
%iowait是I/O等待率,平均負載高,且該數值也高就能夠認爲高負載的緣由就是I/O,以後就能夠進一步查看內存使用率、頁面交換髮生情況等其餘指標。
sar -P就能夠查看多CPU的狀況
四、查看sar命令中操做系統報告的各項指標
兩種用法:追溯過去的統計數據(默認)、週期性的查看當前數據
sar 1 4 一秒一次,共4次
sar -u 查看CPU使用率:%user用戶模式下的使用率 %nice經過nice改變了進程調度優先級的進程,在用戶模式下消耗的CPU時間比例 %system系統模式下的使用率 %iowaitCPU等待磁盤I/O而致使空閒狀態消耗時間的比例%steal利用操做系統虛擬化技術時,等待其餘虛擬CPU計算佔用的時間比例 %idle空閒比例
sar -q 查看平均負載
sar -r 查看內存使用情況:kbmemfree空閒物理內存量 kbmemused使用中的物理內存量 %memused物理內存使用率 kbbuffers內核中做爲緩衝區使用的物理內存容量 kbcached內核中做爲緩存使用的物理內存容量 kbswpfree交換區的空閒容量 kbswpused使用中的交換區容量。
sar -W 查看頁面交換髮生的情況:pswpin/s每秒換入頁面數 pswpout/s每秒換出頁面數
五、下降I/O負載和頁面緩存
%memused愈來愈大,可是不能忘記linux的頁面緩存。
特別是I/O密集型服務器,根據服務器處理的數據量安裝內存,是下降I/O負載的有效方法。
vmstat能夠看到實際發生了多少磁盤訪問。
若是沒法增長內存,能夠考慮將數據分割,分別放在不一樣的服務器上。
要先讀取一次磁盤纔會頁面緩存:在MySQL等數據庫中處理大規模數據時要注意這一點,讓數據庫將必要的數據讀取一次以後再放回生產環境。【此處如何將MySQL各類數據文件所有讀入的程序】
六、負載均衡和操做系統的運行原理
理解操做系統的運行原理是學習負載均衡的重點。
學習操做系統的運行原理以後,就能深刻理解
操做系統緩存
多線程、多進程
虛擬內存機制
文件系統
要調查負載須要操做系統內部的哪些信息