本篇文章為大家展示了怎么進行web應用緩慢故障分析,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
朋友在一家購物網站做運維不久,今日打電話說前臺頁面打開比較慢訂單無法正常投遞,但是查看CPU使用率較低沒什么壓力,只是內存稍高86%左右,磁盤讀寫也很正常,咨詢我怎么進行解決。我問了他一些基本的系統架構問題,知道是F5做的負載均衡分發到前端10臺應用服務器上,中間件是JBOSS,后端數據庫是ORACLE.整理了下思路,決定讓朋友進行如下分析:
一、登陸前端應用服務器,首先查看統計ip連接數
[user@local ~]$ netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1
1 Address
1 servers)
2 172.16.100.35
2 172.16.100.38
2 172.16.100.45
4 127.0.0.1
10 172.16.100.18
20 172.16.100.8
2048 172.16.100.98 #在服務器和負載均衡間有2048個連接
查看JBOSS應用端口8080的情況
[user@local ~]$ netstat -ntu |grep 8080
tcp 0 0 172.16.100.26:8080 172.16.100.98:19593 TIME_WAIT
tcp 0 0 172.16.100.26:8080 172.16.100.98:16777 TIME_WAIT
tcp 0 0 172.16.100.26:8080 172.16.100.98:11913 TIME_WAIT
tcp 0 0 172.16.100.26:8080 172.16.100.98:1929 TIME_WAIT
tcp 0 0 172.16.100.26:8080 172.16.100.98:53641 TIME_WAIT
tcp 0 0 172.16.100.26:8080 172.16.100.98:43401 TIME_WAIT
tcp 0 0 172.16.100.26:8080 172.16.100.98:36233 TIME_WAIT
tcp 0 0 172.16.100.26:8080 172.16.100.98:28040 TIME_WAIT
tcp 0 0 172.16.100.26:8080 172.16.100.98:5000 TIME_WAIT
...............................................................
...............................................................
...............................................................
[user@local ~]$ netstat -ntu |grep 8080|grep TIME_WAIT |wc -l
2003
通過以上內容顯示,在前端應用服務器和負載均衡間產生了大量TCP等待,這正是消耗內存并把前臺應用拖慢的主要原因。由負載均衡分發到應用服務器的大量請求可能由于JBOSS的處理瓶頸產生了等待,實際處理的請求遠小于分發過來的請求。
二、查看JBOSS連接數設置
一般中間件jboss連接后端的oracle,在deploy下會有個文件oracle-ds.xml,我們看一下它連接數據庫的代碼:
<local-tx-datasource>
<jndi-name>jdbc/TETD</jndi-name>
<connection-url>jdbc:oracle:thin:@172.16.100.18:1521:orcl</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>TETD_QT</user-name>
<password>Hpoui&bmn$m#e$m_n20uytwe@iil</password>
<min-pool-size>20</min-pool-size>
<max-pool-size>50</max-pool-size>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
注意:<min-pool-size>的值設的是20,<max-pool-size>設的值是50
三、查看ORACLE連接數設置
SQL>select count(*) from v$process --當前的連接數
顯示為45
SQL>select value from v$parameter where name = 'processes' --數據庫允許的最大連接數
顯示為600
(注:當數據庫最大連接數不夠時會出現客戶端連接間歇性失敗,報錯ORA-12519)
通過以上數據分析,在ORACLE端顯示的連接數并沒有體現出應有的壓力,那么瓶頸在哪?應該是JBOSS上,JBOSS的連接池參數設置的太小,導致前端的請求卡在JBOSS處而不能正常通過JBOSS連接到后端ORACLE,從而導致前臺應用緩慢訂單不正常。
分析完畢后,告訴朋友增大JBOSS連接池參數,把<min-pool-size>調整為200,</min-pool-size>調整為500.后來朋友調整了JBOSS連接池參數后,問題得到了顯著緩解,內存使用率也降下來了。
這一事例告訴我們,一個水管中間最細處往往決定了通過的水流量,我們在優化后端ORACLE數據庫的同時也別忘了優化中間件的參數。
補充1、修改ORACLE最大連接數:
#修改oracle最大連接數:
alter system set processes = 1000 scope = spfile;
重啟數據庫:
shutdown immediate;
startup;
補充2、修改/etc/sysctl.conf文件
net.ipv4.tcp_max_tw_buckets = 3000
表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除并打印警告信息。默認為180000,改為 3000。此項參數可以控制TIME_WAIT套接字的最大數量,避免服務器被大量的TIME_WAIT套接字拖死。
上述內容就是怎么進行web應用緩慢故障分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。