強烈推薦|你不可不知的性能優化內幕
一. 基本概念
- 軟件系統質量特性
安全性:同時兼顧向合法用戶提供服務,以及阻止非授權使用軟件及資源的能力。
健壯、可靠:軟件系統在一定的時間內無故障運行的能力、容錯能力、恢復能力
可擴展、可維護、可移植:正在運行的軟件系統以適應新需求、變化了的需求的難易程度
可用性、易用性、性能:性能是指軟件及時提供相應服務的能力。 具體而言, 性能包括速度、 吞吐量和持續高速性三方面的要求 。
- 性能的定義及表現
定義:多快給用戶想要的結果;主要考察流暢度和更少的資源占用兩個方面
表現:一些頁面加載超過3秒,就會影響用戶體驗,從而流失用戶,所以我們的業務計算結果越快出來越好
二、性能優化涉及的範圍
- 範圍
(1)硬件環境範圍
單機:CPU、內存、磁盤、網絡
多機:存儲架構、網絡架構、應用架構
(2)軟件環境範圍:JVM、TOMCAT、數據庫、軟件系統(我們的寫的程序代碼)都是可以優化的地方
(3)應用場景
計算密集型,集中式資源使用
IO密集型,分散型資源利用
說明:我們程序員一般關註的是軟件環境範圍的性能優化,但是前提是硬件環境不要太苛刻,比如我們的軟件啟動就需要512M的內存,結果硬件環境只有128M的內存,這樣即使再怎麽優化也是達不到要求的
- 性能是平衡之道
即在有限的資源下,提供最佳的訪問能力及處理速度。木桶原理之:發現最差瓶頸,提升整體效率。呑吐量和響應速度兼顧。
- 調優是量體裁衣
根據不同的場景,針對性的提高適用性。如:前臺的響應速度,後臺的統計結果。前者用戶耐心有限,後者需要豐富數據分析。
- 性能優化的一些術語
QPS:每秒查詢次數
TPS:每秒事務次數
呑吐量:單位時間內成功地傳送數據的數量
響應時間:用戶請求到用戶接收結果的時間。
- 性能瓶頸
網絡IO,阻塞式IO是最大的問題
網絡:帶寬問題,CDN問題,我們在進行性能優化時,首先要排查是不是帶寬和CDN的問題
-
運維監控
- 了解一下基本的運維相關的命令,知道怎麽使用
1.1 top
說明:top命令用來顯示執行中的程序進程,使用權限是所有用戶。按q鍵退出
格式:top [-] [d delay] [q] [c] [S] [s] [i] [n]
主要參數:
d:指定更新的間隔,以秒計算。
q:沒有任何延遲的更新。如果使用者有超級用戶,則top命令將會以最高的優先序執行。
c:顯示進程完整的路徑與名稱。
S:累積模式,會將己完成或消失的子行程的CPU時間累積起來。
s:安全模式。
i:不顯示任何閑置(Idle)或無用(Zombie)的行程。
n:顯示更新的次數,完成後將會退出top。
命令圖解:
第一行表示的項目依次為當前時間、系統運行時間、當前系統登錄用戶數目、1/5/10分鐘系統平均負載(一般來說,這個負載值應該不太可能超過 1 才對,除非您的系統很忙碌。 如果持續高於 5 的話,那麽.....仔細的看看到底是那個程序在影響整體系統吧!)。
第二行顯示的是所有啟動的進程、目前運行、掛起 (Sleeping)的和無用(Zombie)的進程。(比較需要註意的是最後的 zombie 那個數值,如果不是 0 ,嘿嘿!好好看看到底是那個 process 變成疆屍了吧?!)(stop模式:與sleep進程應區別,sleep會主動放棄cpu,而stop是被動放棄cpu ,例單步跟蹤,stop(暫停)的進程是無法自己回到運行狀態的)
第三行顯示的是目前CPU的使用情況,包括us用戶空間占用CPU百分比、sy 內核空間占用CPU百分比、ni 用戶進程空間內改變過優先級的進程占用CPU百分比(中斷處理占用)、id 空閑CPU百分比、wa 等待輸入輸出的CPU時間百分比、hi,si,st 三者的意思目錄還不清楚 :)
第四行顯示物理內存的使用情況,包括總的可以使用的內存、已用內存、空閑內存、緩沖區占用的內存。
第五行顯示交換分區使用情況,包括總的交換分區、使用的、空閑的和用於高速緩存的大小。
第六行顯示的項目最多,下面列出了詳細解釋。
PID(Process ID):進程標示號 ( 每個 process 的 ID )
USER:進程所有者的用戶名 ( 該 process 所屬的使用者 )
PR:進程的優先級別 ( Priority 的簡寫,程序的優先執行順序,越小越早被執行 )
NI:進程的優先級別數值 ( Nice 的簡寫,與 Priority 有關,也是越小越早被執行 )
VIRT:進程占用的虛擬內存值。
RES:進程占用的物理內存值。
SHR:進程使用的共享內存值。
S:進程的狀態,其中S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值是負數。
%CPU:該進程占用的CPU使用率。
%MEM:該進程占用的物理內存和總內存的百分比。
TIME+:該進程啟動後占用的總的CPU時間 ( CPU 使用時間的累加 )
Command:進程啟動的啟動命令名稱,如果這一行顯示不下,進程會有一個完整的命令行。
top命令使用過程中,還可以使用一些交互的命令來完成其它參數的功能。這些命令是通過快捷鍵啟動的。
<空格>:立刻刷新。
P:根據CPU使用大小進行排序。
T:根據時間、累計時間排序。
q:退出top命令。
m:切換顯示內存信息。
t:切換顯示進程和CPU狀態信息。
c:切換顯示命令名稱和完整命令行。
M:根據使用內存大小進行排序。
W:將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法
1.2 free
說明:free命令用來顯示內存的使用情況,使用權限是所有用戶。
格式:free [-b|-k|-m] [-o] [-s delay] [-t] [-V]
主要參數:
-b -k -m:分別以字節、KB、MB為單位顯示內存使用情況。
-s delay:顯示每隔多少秒數來顯示一次內存使用情況。
-t:顯示內存總和列。
-o:不顯示緩沖區調節列。
使用示例:
free命令是用來查看內存使用情況的主要命令。和top命令相比,它的優點是使用簡單,並且只占用很少的系統資源。通過-S參數可以使用free命令不間斷地監視有多少內存在使用,這樣可以把它當作一個方便實時監控器。
#free -h -s5
1.3 df
說明:df命令的功能是用來檢查Linux服務器的文件系統的磁盤占用情況。可以利用該命令來獲取磁盤被占用了多少空間,目前還剩下多少空間等信息。如果沒有指定文件名稱,則當前所有的被掛載的文件系統的空間將被顯示。默認情況下,磁盤空間將以1kb位單位進行顯示。
格式:df 【選項】 【文件】
命令參數:
-a 全部文件系統的列表
-h 方便閱讀方式顯示
-i 顯示node信息
-k 區塊為1024字節
-l 只顯示本地文件系統
-m 區塊為1048576字節
-p 輸出格式為posix
-T 文件系統類型
使用示例:
linux中df命令的輸出清單的第一列是代表的文件系統對應的設備文件的路徑名稱(一般是硬盤上的分區);第二列給出的是數據塊的數目。第三四列分別代表已用的和可用的數據塊數量。也許用戶會感到奇怪的是兩者相加並不等於總的數據塊數,這是因為每個分區都預留了空間供管理員使用。即使遇到普通用戶空間已經滿的情況,管理員仍然留有可以登錄和解決問題的空間。最後一列是文件系統的掛載點。
1.4 du
說明:du命令查看和計算目錄的大小
1.5 查看日誌分析
cat /var/log/message,cat /var/log/nginx/access.log,cat /var/log/tomcat
- 其他運維監控軟件
stat系列:vnstat,iostat,vmstat
三、處理模式
- 調優順序
從底向上找出瓶頸,順序是服務器優化——環境優化——數據庫優化——應用系統優化
- 提高硬件能力
目標:買最好的機器,用最貴的網絡,泡最靚的妞><
2.1 硬件配比
CPU與內存的比例,1:2或者1:4
磁盤空間及分區,多個盤(100G)
文件系統格式及調優。Ext4
2.2 網絡帶寬
公網5M帶寬,1000人以內內網帶寬。
2.3 系統環境
Nginx,安裝及配置
Tomcat
Mysql。
-
提高系統處理能力
目標:安裝高性能的軟件、保障安全性、服務器配置優化
安裝高性能的軟件:
WEB應用服務器
Nginx
Tomcat
保障安全性:
防火墻,Centos自帶,一般不啟動selinux,使用VPS來設置
服務器配置優化:
網絡配置優化
連接數
ipv6
- 服務器環境安裝
Nginx:提高Tomcat靜態文件處理能力、負載均衡、反向代理
Centos環境,安裝服務端軟件,統一采用yum方式
Yum install nginx
Yum install java-1.8.0-openjdk.x86_64
Yum install tomat
Yum install mariadb
- 服務器環境配置
Nginx的主配置目錄:/etc/nginx/
Nginx的server配置目錄:/etc/nginx/conf.d/
四、服務器處理方法
- 服務器環境優化
網絡優化、安全性配置、用戶組權限、目錄規劃
- 服務器常規監控
命令:
Top命令
Free命令
Df命令
工具:
Xshell 連接linux操作界面
Filezilla 把文件上傳到linux服務器上,和xftp、winscp的工具類似
強烈推薦|你不可不知的性能優化內幕