Linux 下Tomcat伺服器響應越來越慢分分析

2021-09-07 19:49:38 字數 3637 閱讀 4320

本文**自: ,感謝給我提供提供思路。

1.排除本機自身原因

2.伺服器效能分析

3.專案本身分析(不詳細說)

4.虛擬機器分析

5.資料庫分析

可以使用站長工具測試**速度。

使用top命令檢視伺服器的資源使用情況,主要分析cpu和記憶體的使用情況(top 命令是 linux 下常用的效能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,預設5秒重新整理一下程序列表,所以類似於 windows 的任務管理器。):

第三行顯示的是cpu的使用情況,詳細含義如下:

us---使用者空間占用cpu的百分比、sy---核心空間占用cpu的百分比、ni---改變過優先順序的程序占用cpu的百分比、id---空閒cpu百分比、wa---io等待占用cpu的百分比、hi---硬中斷(hardware irq)占用cpu的百分比、si---軟中斷(software interrupts)占用cpu的百分比、st---steal time,分配給執行在主機上其它虛擬機器的任務的實際cpu時間,一般只有在虛擬機器os。

第4行是當前的記憶體情況,伺服器總記憶體8054352k,已使用2879468k,剩餘5174884k,緩衝265728k。

如果使用jdbc連線池,需要對連線池的配置進行分析(分析執行緒池的最大數量和釋放時間等等)。

這裡以c3p0為例,下面是我曾經做的乙個專案的配置,如下圖:

這裡本來只是本地測試的配置方案,由於粗心,上線後忘記修改了,當多人訪問時,會出現等待連線超時的情況,我們需要根據專案的實際情況設定合適的配置資料。

還有可能專案的設計方面不合理導致響應緩慢,這裡就不詳細說明了。

checkouttimeout---當連線池連線耗盡時,客戶端呼叫getconnection()後等待獲取新連線的時間,超時後將丟擲sqlexception,如設為0則無限期等待。單位毫秒。預設: 0

minpoolsize---連線池中保留的最小連線數,預設為:3

maxpoolsize---連線池中保留的最大連線數。預設值: 15

maxidletime---最大空閒時間,設定時間內未使用則連線被丟棄。若為0則永不丟棄。預設值: 0

maxidletimeexcessconnections---default : 0 單位 s 這個配置主要是為了減輕連線池的負載,比如連線池中連線數因為某次資料訪問高峰導致建立了很多資料連線 ,但是後面的時間段需要的資料庫連線數很少,則此時連線池完全沒有必要維護那麼多的連線,所以有必要將斷開丟棄掉一些連線來減輕負載,必須小於maxidletime。配置不為0,則會將連線池中的連線數量保持到minpoolsize。為0則不處理

acquireincrement---當連線池中的連線耗盡的時候c3p0一次同時獲取的連線數。預設值: 3

使用top指令檢視虛擬機器的記憶體占用情況,有時候可以發現雖然虛擬機器占用記憶體的百分比不大卻有明顯的上限值,我們就需要去檢視虛擬機器的配置情況。

解決方法(以tomcat為例):

具體的數值根據實際情況而定。

資料庫的分析內容和需要考慮的方面有很多,這裡只說本人遇到過的幾種情況:

a.最大連線數    

show variables like '%max_connections%'; 檢視最大連線數

show status like 'threads%';當前連線的使用情況

threads_connected---開啟的連線數

threads_running---這個數值指的是啟用的連線數,這個數值一般遠低於connected數值

如果最大連線數的值太小可以根據實際情況進行修改,一般修改為1000即可,設定方法有兩種:

1.臨時設定,重啟服務後將失效

2.修改資料庫配置檔案

在/etc/my.cnf 檔案的[mysqld]下增減一行:max_connections = 1000

b.超時控制

mysql存在一項屬性「wait_timeout」,預設值為28800秒(8小時),wait_timeout的值可以設定,但最多只能是2147483,不能再大了。也就是約24.85天 ,可以通過show global variables like 'wait_timeout';命令來檢視。

wait_timeout的含義是:乙個connection空閒超過8個小時,mysql將自動斷開該connection,通俗的講就是乙個連線在8小時內沒有活動,就會自動斷開該連線。由於dbcp沒有檢驗該connection是否有效,用其進行資料操作便會出現異常。

如果是由超時控制引起的問題,不建議修改wait_timeout的值,在資料庫連線的url的後面加上「&autoreconnect=true&failoverreadonly=false」即可解決。

c.dns反向解析  

mysql資料庫收到乙個網路連線後,首先拿到對方的ip位址,然後對這個ip位址進行反向dns解析從而得到這個ip位址對應的主機名。用主機名在許可權系統裡面進行許可權判斷。反向dns解析是耗費時間的,有可能讓使用者感覺起來很慢。甚至有的時候,反向解析出來的主機名並沒有指向這個ip位址,這時候就無法連線成功了。 可以在配置檔案裡面禁止mysql進行反向dns解析,只需在my.cnf的[mysqld]段落中加入如下行即可:

skip-name-resolve (windows與linux下一樣的)

d.表快取記憶體

show global status like 'open%tables%';檢視開啟的表的數量:

open_tables:是當前在快取中開啟表的數量。

opened_tables:是mysql自啟動起,開啟表的數量。

當opened_tables數值非常大,說明cache太小,導致要頻繁地open table,可以檢視下當前的table_open_cache設定:

show variables like 'table_open_cache';  檢視快取的上限值

設定table_open_cache的值有兩種方式(如果是4g左右記憶體的伺服器,建議設為2048):

1.臨時設定,重啟服務後將失效

set global table_open_cache=2048;

2.修改資料庫配置檔案

在/etc/my.cnf 檔案的[mysqld]下增減一行:table_open_cache = 2048

e.慢查詢日誌

記錄的慢查詢日誌的目的是確認是否是由於某些語句執行緩慢而導致的伺服器響應慢。

慢查詢就不詳細說了,網上可以查到很多。

Linux下配置Tomcat伺服器

釋放出來之後可以刪除原來的包,進入伺服器目錄中,現在沒什麼問題就可以啟動tomcat了,進入bin下,執行指令碼startup.sh 然後看到這個就已經啟動了,如果之前網域名稱解析到了伺服器,並且80埠進行了繫結,那麼不用專門進行網域名稱繫結直接執行http servername 8080 即可看到...

Linux下Tomcat伺服器開啟HTTPS

前文說明 經過了大約兩周的備案過程,前天終於得到了備案成功的訊息,內心也是十分的激動。但是當我訪問的時候,google瀏覽器提示不安全,這是因為沒有採用https導致的,因此開啟了長達一天的痛苦摸索。實驗環境 我用的是 linux 的 ubantu 系統,伺服器為 tomcat9,網域名稱是從阿里雲...

伺服器配置 二 linux下配置tomcat

解壓在 sotfware 下面 tar zxvf apache tomcat 9.0.11.tar.gz重新命名 為方便記憶以及日後的使用,我們將該資料夾使用 mv 命令重新命名為 tomcat9.執行命令 mv apache tomcat 9.0.11 tomcat9 2.啟動tomcat 然後你...