WEB應用訪問緩慢的問題定位


WEB應用訪問緩慢的問題定位

歡迎關注博主公眾號「java大師」, 專注於分享Java領域干貨文章, 關注回復「資源」, 免費領取全網最熱的Java架構師學習PDF, 轉載請注明出處 http://www.javaman.cn/jszw/web-slow

1、如果頁面能正常訪問,但是每個頁面的打開速度都很慢,處理方式如下:

1)首先查看應用服務器和數據庫服務器的cpu和內存使用情況是不是很高

windows服務器通過任務管理器查看

windows截圖-1.png

linux服務器通過top命令查看內存和cpu使用率:主要看1、2、3這三個指標有沒有異常,內存和cpu有沒有超過95%

linux截圖-2.png

詳細參數參見下了文檔

Linux查看CPU和內存使用情況:https://www.cnblogs.com/mengchunchen/p/9669704.html

2)如果兩個服務器的內存都不高,通過下面語句找到oracle等待時長最多的sql帶入plsql進行驗證
SELECT ASH.USER_ID,
       U.USERNAME,
       S.SQL_TEXT,
       SUM(ASH.WAIT_TIME + ASH.TIME_WAITED) TTL_WAIT_TIME
  FROM V$ACTIVE_SESSION_HISTORY ASH, V$SQLAREA S, DBA_USERS U
 WHERE ASH.SAMPLE_TIME BETWEEN SYSDATE - 15 / (24 * 60) AND SYSDATE
   AND ASH.SQL_ID = S.SQL_ID
   AND ASH.USER_ID = U.USER_ID
 GROUP BY ASH.USER_ID, S.SQL_TEXT, U.USERNAME
 ORDER BY TTL_WAIT_TIME

plsql驗證

將sql放入plsql窗口,按【F5】進入執行計划頁面

oracle執行計划分析-4.png

cost為耗費時長,執行順序是按照縮進從右往左,從上到下執行,上圖執行順序為table access full--> table access full-->hash join-->all rows。如果一個列表查詢的sql執行的cost耗費越大,結合oracle等待時長的sql,可以斷定該sql存在問題!!!

將定位的sql提交給研發進行進一步的分析!!

目前發現數據庫表中的部分索引建立以后失效的情況,經分析定位為:隨着表的增長,where條件出來的數據太多,大於15%,使得索引失效,目前無法提前發現,只能通過上面的語句定位到執行緩慢的語句。

附錄----執行計划詳解:https://www.cnblogs.com/Dreamer-1/p/6076440.html

3)如果沒有找到等待過長的sql語句,需要進一步排查應用服務器到oracle數據庫主機的連接是否順暢,有沒有存在延遲!!

3.1)oracle的alert的日志文件超過4G,會導致連接報錯

​ 可以通過下列語句找到alert.log的目錄

select value from v$diag_info where name ='Diag Trace';

oracle日志文件-5.png

​ 找到該日志,然后備份刪除

oracle日志文件路徑-6.png

3.2)如果日志文件沒有超過4G或者3.1步驟處理完仍然沒有解決數據庫連接超時或者慢的問題

​ 需要執行:tnsping IP:端口/實例名稱

C:\Users\fangr>tnsping localhost:1521/orcl
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 03-7月 -2021 17:08:45

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

已使用的參數文件:
D:\app1\fangr\product\11.2.0\dbhome_1\network\admin\sqlnet.ora

已使用 EZCONNECT 適配器來解析別名
嘗試連接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orcl))(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
OK (0 毫秒)

​ 執行結果如下圖:如果超過1000毫秒,則連接可能存在問題!!需要協調ping一下是否丟包,或者協調客戶定位下網絡問題

oracle-tnsping-6.png

擴展:AWR分析報告進行數據庫的分析

覺得數據庫慢的時候也可以通過AWR分析報告,對oracle進行性能分析找到一些oracle可能存在的潛在問題

對數據庫緩慢時間段范圍內生成awr報告!!

AWR報告生成方法:https://www.cnblogs.com/liyasong/p/oracle_report1.html

AWR報告詳細解讀:https://blog.csdn.net/u011334954/article/details/103953103?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242

該報告重點關注如下內容:

1)正常情況下DBCPU應該排在首位,%DB time每個耗時不能超過70%,如果超過就要針對處理!

awr報告分析7-1.png

2)根據SQL ordered by Elapsed Time,找到耗時比較長的sql,針對sql進行分析

awr報告分析7-2.png

3)查看SGA和PGA的內存使用是否過高,正常情況下不得超過主機內存的80%

awr-分析報告3

2、如果頁面能正常訪問,添加記錄或者更新網頁卡住不動:

網頁訪問和列表加載正常,此刻很有可能存在oracle鎖表的情況,通過下面的sql執行,找到被鎖的表

select sess.sid,
       sess.serial#,
       lo.oracle_username,
       lo.os_user_name,
       ao.object_name,
       lo.locked_mode
  from v$locked_object lo, dba_objects ao, v$session sess
 where ao.object_id = lo.object_id
   and lo.session_id = sess.sid;

找到被鎖的表

oracle鎖表7-4.png

通過下面sql定位到鎖表的sql語句

SELECT A.USERNAME,
       A.MACHINE,
       A.PROGRAM,
       A.SID,
       A.SERIAL#,
       A.STATUS,
       C.PIECE,
       C.SQL_TEXT
  FROM V$SESSION A, V$SQLTEXT C
 WHERE A.SID IN (SELECT DISTINCT T2.SID
                   FROM V$LOCKED_OBJECT T1, V$SESSION T2
                  WHERE T1.SESSION_ID = T2.SID)
   AND A.SQL_ADDRESS = C.ADDRESS(+)
 ORDER BY C.PIECE;

將找到的sql提交給研發,判斷該sql語句是人為鎖定的還是程序未提交導致的!

image-20210703163738092

如果需要,可以通過下面的sql進行解鎖

alter system kill session '68,51';     --分別為SID和SERIAL#號

3、如果排除oracle和sql的問題,那么進一步排查應用服務器的問題

1)調整程序連接的最大線程數和排隊請求數

​ tomcat:將maxThreads="800" acceptCount="1000"調整為800和500代表允許最大線程數為800,可以同時處理800個請求,如果超 過800個線程,接受排隊500個請求!

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="800" acceptCount="500"/>

​ weblogic:

進入WebLogic控制台——左邊窗口的mydomain——servers——點擊myserver——Configuration——General——點擊Advanced Options的Show鏈接——最下面的Configure Execute Queues 鏈接——weblogic.kernel.Default鏈接——Thread Count參數。的卻是隱藏的比較深。修改Thread Count的值,然后重啟WebLogic就可以生效了。

2)根據服務器的內存大小,調整tomcat的內存,最大不超過應用服務器內存的60%

​ tomcat:

在“echo"UsingCATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"
weblogic:
直接修改user_projects\domains\base_domain\bin下的startWebLogic.cmd文件

  在它下面添加一下代碼

  set JAVA_OPTIONS=-Xms256m –Xmx256m;

3)根據tomcat的catalina.log的具體報錯反饋給開發進行查詢,需要根據的實際報錯

4)服務器重啟大法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM