強烈推薦|你不可不知的性能優化內幕

一. 基本概念java

1. 軟件系統質量特性node

安全性:同時兼顧向合法用戶提供服務,以及阻止非受權使用軟件及資源的能力。linux

健壯、可靠:軟件系統在必定的時間內無端障運行的能力、容錯能力、恢復能力ios

可擴展、可維護、可移植:正在運行的軟件系統以適應新需求、變化了的需求的難易程度nginx

可用性、易用性、性能:性能是指軟件及時提供相應服務的能力。 具體而言, 性能包括速度、 吞吐量和持續高速性三方面的要求 。程序員

2. 性能的定義及表現sql

定義:多快給用戶想要的結果;主要考察流暢度和更少的資源佔用兩個方面shell

表現:一些頁面加載超過3秒,就會影響用戶體驗,從而流失用戶,因此咱們的業務計算結果越快出來越好數據庫

2、性能優化涉及的範圍緩存

1. 範圍

(1)硬件環境範圍

單機:CPU、內存、磁盤、網絡

多機:存儲架構、網絡架構、應用架構

(2)軟件環境範圍:JVM、TOMCAT、數據庫、軟件系統(咱們的寫的程序代碼)都是能夠優化的地方

(3)應用場景

計算密集型,集中式資源使用

IO密集型,分散型資源利用

說明:咱們程序員通常關注的是軟件環境範圍的性能優化,可是前提是硬件環境不要太苛刻,好比咱們的軟件啓動就須要512M的內存,結果硬件環境只有128M的內存,這樣即便再怎麼優化也是達不到要求的

2. 性能是平衡之道

即在有限的資源下,提供最佳的訪問能力及處理速度。木桶原理之:發現最差瓶頸,提高總體效率。呑吐量和響應速度兼顧。

3. 調優是量體裁衣

根據不一樣的場景,針對性的提升適用性。如:前臺的響應速度,後臺的統計結果。前者用戶耐心有限,後者須要豐富數據分析。

4. 性能優化的一些術語

QPS:每秒查詢次數

TPS:每秒事務次數

呑吐量:單位時間內成功地傳送數據的數量

響應時間:用戶請求到用戶接收結果的時間。

5. 性能瓶頸

網絡IO,阻塞式IO是最大的問題

網絡:帶寬問題,CDN問題,咱們在進行性能優化時,首先要排查是否是帶寬和CDN的問題

6. 運維監控

1. 瞭解一下基本的運維相關的命令,知道怎麼使用

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

2. 其餘運維監控軟件

stat系列:vnstat,iostat,vmstat

3、處理模式

1. 調優順序

從底向上找出瓶頸,順序是服務器優化——環境優化——數據庫優化——應用系統優化

2. 提升硬件能力

目標:買最好的機器,用最貴的網絡,泡最靚的妞><

2.1 硬件配比

CPU與內存的比例,1:2或者1:4

磁盤空間及分區,多個盤(100G)

文件系統格式及調優。Ext4

2.2 網絡帶寬

公網5M帶寬,1000人之內內網帶寬。

2.3 系統環境

Nginx,安裝及配置

Tomcat

Mysql。

3. 提升系統處理能力

 目標:安裝高性能的軟件、保障安全性、服務器配置優化

安裝高性能的軟件

WEB應用服務器

Nginx

Tomcat

保障安全性:

防火牆,Centos自帶,通常不啓動selinux,使用VPS來設置

服務器配置優化:

網絡配置優化

鏈接數

ipv6

4. 服務器環境安裝

Nginx:提升Tomcat靜態文件處理能力、負載均衡、反向代理

Centos環境,安裝服務端軟件,統一採用yum方式

Yum install nginx

Yum install java-1.8.0-openjdk.x86_64

Yum install tomat

Yum install mariadb

5. 服務器環境配置

Nginx的主配置目錄:/etc/nginx/

Nginx的server配置目錄:/etc/nginx/conf.d/

4、服務器處理方法

1. 服務器環境優化

網絡優化、安全性配置、用戶組權限、目錄規劃

2. 服務器常規監控

命令:

Top命令

Free命令

Df命令

工具:

Xshell 鏈接linux操做界面

Filezilla 把文件上傳到linux服務器上,和xftp、winscp的工具相似

歡迎工做一到五年的Java工程師朋友們加入Java架構開發:744677563

羣內提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用本身每一分每一秒的時間來學習提高本身,不要再用"沒有時間「來掩飾本身思想上的懶惰!趁年輕,使勁拼,給將來的本身一個交代!

相關文章
相關標籤/搜索