偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Linux服務(wù)器中高負(fù)載現(xiàn)象故障排查指南

譯文
系統(tǒng) Linux 新聞
技術(shù)支持分析師們常常接到用戶(hù)對(duì)服務(wù)器高負(fù)載的控訴。服務(wù)器擁有者、系統(tǒng)管理員或者服務(wù)器供應(yīng)商應(yīng)當(dāng)如何對(duì)高負(fù)載現(xiàn)象進(jìn)行故障排查,在本文中我們就來(lái)探討一下。

【2013年7月11日 51CTO外電頭條】技術(shù)支持分析師們常常接到用戶(hù)對(duì)服務(wù)器高負(fù)載的控訴。事實(shí)上cPanel軟件及其安裝的應(yīng)用很少引發(fā)服務(wù)器高負(fù)載情況。服務(wù)器擁有者、系統(tǒng)管理員或者服務(wù)器供應(yīng)商應(yīng)當(dāng)對(duì)高負(fù)載狀況進(jìn)行初步調(diào)查,并在確認(rèn)情況復(fù)雜后再向分析人士求助。

服務(wù)器高負(fù)載因何而起?

下列項(xiàng)目的過(guò)度使用會(huì)直接導(dǎo)致高負(fù)載問(wèn)題:

  • CPU
  • 內(nèi)存(包括虛擬內(nèi)存)
  • 磁盤(pán)I/O

該如何檢查這些項(xiàng)目?

這取決于大家是要審查當(dāng)前資源使用情況還是歷史資源使用情況。當(dāng)然,在本文中我們將從這兩方面進(jìn)行探討。

關(guān)于sar的簡(jiǎn)要說(shuō)明

歷史資源使用情況可通過(guò)sar工具查看,該工具在默認(rèn)情況下應(yīng)該通過(guò)sysstat軟件包安裝在所有cPanel服務(wù)器當(dāng)中。只要通過(guò)cron命令對(duì)sysstat進(jìn)行周期性執(zhí)行(/etc/cron.d/sysstat),服務(wù)器的運(yùn)行狀態(tài)數(shù)據(jù)就會(huì)被收集起來(lái)。如果cron沒(méi)有運(yùn)行,sysstat將無(wú)法收集歷史統(tǒng)計(jì)結(jié)果。

要在sar中查看歷史資源使用情況,我們必須為文件提供與統(tǒng)計(jì)數(shù)據(jù)相符的路徑。

舉例來(lái)說(shuō),如果大家打算查看本月23號(hào)以來(lái)服務(wù)器的平均負(fù)載狀況,可以運(yùn)行以下命令:

代碼:

  1. [user@host ~]$ sar -q -f /var/log/sa/sa23 

以上命令中的-q用于獲取平均負(fù)載信息,而-f則用于指定sar從哪個(gè)文件中獲取信息。請(qǐng)注意,sar可能無(wú)法使用一周之前乃至更早的運(yùn)行信息。

如果大家打算查看當(dāng)前日期的統(tǒng)計(jì)信息,則不必為其指令具體時(shí)間。輸入以下命令即可顯示今天的平均負(fù)載情況:

代碼:

  1. [user@host ~]$ sar -q 

我們強(qiáng)烈建議大家閱讀sar說(shuō)明文檔:

代碼:

  1. [user@host ~]$ man sar 

它所提供的統(tǒng)計(jì)信息能夠幫助我們確切掌握服務(wù)器的運(yùn)行狀態(tài)。

當(dāng)前CPU使用情況

運(yùn)行top,并在Cpu(s)一行中檢查%id部分所顯示的閑置CPU百分比。該數(shù)字越高結(jié)果越好,說(shuō)明CPU的工作負(fù)載不強(qiáng)。處于99%閑置狀態(tài)下的CPU幾乎沒(méi)有處理任何實(shí)際任務(wù),而處于1%閑置狀態(tài)下的CPU則意味著接近滿(mǎn)載。

代碼:

  1. [user@host ~]$ top c 

提示:可加寫(xiě)P根據(jù)消耗CPU資源的多少對(duì)進(jìn)程加以分類(lèi)。

歷史CPU使用情況

查看“%idle”列:

代碼:

  1. [user@host ~]$ sar -p 

當(dāng)前內(nèi)存使用情況

代碼:

  1. [user@host ~]$ free -m 

提示:運(yùn)行top c并加寫(xiě)M可查看哪個(gè)進(jìn)程占用的內(nèi)存量最大。

歷史內(nèi)存使用情況

根據(jù)sar版本的不同,命令內(nèi)容也有所區(qū)別。早期版本通過(guò)添加“-r”參數(shù)顯示內(nèi)存使用百分比與虛擬內(nèi)存使用百分比,但新版本則改用“-s”參數(shù)顯示虛擬內(nèi)存使用百分比。

Check %memused and %swpused:

代碼:

  1. [user@host ~]$ sar -r 

或者:

代碼:

  1. [user@host ~]$ sar -r 

代碼:

  1. [user@host ~]$ sar -S 

內(nèi)存使用情況提示:服務(wù)器內(nèi)存占用量較高的情況其實(shí)非常正常。這是因?yàn)閮?nèi)存的讀寫(xiě)速度及效率遠(yuǎn)高于服務(wù)器磁盤(pán),因此操作系統(tǒng)傾向于將內(nèi)存作為緩沖機(jī)制預(yù)先載入數(shù)據(jù),從而提高數(shù)據(jù)讀取速度。

同樣,內(nèi)存使用百分比也并不是什么大問(wèn)題(除非大家沒(méi)有設(shè)置虛擬內(nèi)存分區(qū),但這也與內(nèi)存本身無(wú)關(guān))。大家真正需要關(guān)注的是虛擬內(nèi)存使用百分比,因?yàn)橹挥性诜?wù)器的物理內(nèi)存被全部占用后、虛擬內(nèi)存才會(huì)接替而上發(fā)揮作用。這一數(shù)字越低,就說(shuō)明服務(wù)器的運(yùn)行狀態(tài)越好。如果虛擬內(nèi)存使用率為0%,則意味著我們的服務(wù)器能夠完全利用物理內(nèi)存執(zhí)行任務(wù)。

那么虛擬內(nèi)存使用率達(dá)到多少才算過(guò)高?這取決于大家自己的感覺(jué)。一般來(lái)說(shuō),如果虛擬內(nèi)存使用率一直不高、那么我們的服務(wù)器的運(yùn)行狀態(tài)還是比較理想的。如果大家發(fā)現(xiàn)虛擬內(nèi)存使用率隨時(shí)間不斷提升(例如由1%到7%再到32%),這就代表服務(wù)器上的某些進(jìn)程正在瘋狂吞噬內(nèi)存,我們需要及時(shí)展開(kāi)調(diào)查以了解具體情況(而不該直接安裝更多內(nèi)存)。一旦服務(wù)器用盡了所有物理內(nèi)存與虛擬內(nèi)存,那么整套系統(tǒng)的運(yùn)行將變得極為緩慢,需要經(jīng)過(guò)重啟才能暫時(shí)恢復(fù)正常。

當(dāng)前磁盤(pán)I/O使用情況

注意:這一項(xiàng)對(duì)于OpenVZ/Virtuozzo容器不起作用。

以下命令將以每秒一次的頻率連續(xù)顯示十次磁盤(pán)使用率統(tǒng)計(jì)。請(qǐng)大家關(guān)注顯示結(jié)果中的%util列:

代碼:

  1. [user@host ~]$ iostat -x 1 10 

歷史磁盤(pán)I/O使用情況

代碼:

  1. [user@host ~]$ sar -d 

優(yōu)秀的系統(tǒng)管理員能夠準(zhǔn)確把握服務(wù)器負(fù)載的基準(zhǔn)線(xiàn),并在當(dāng)前負(fù)載超出基準(zhǔn)時(shí)立即做出判斷。這樣做的主要目的(除了防止服務(wù)器陷入半癱瘓并不得不重新啟動(dòng)之外)是為了及時(shí)了解負(fù)載高企時(shí)服務(wù)器正在運(yùn)行哪些項(xiàng)目??焖俜磻?yīng)能幫助大家在發(fā)現(xiàn)問(wèn)題后第一時(shí)間進(jìn)行故障排查。

如果服務(wù)器負(fù)載過(guò)高的狀況出現(xiàn)在凌晨?jī)牲c(diǎn)到四點(diǎn)之間,那么正在熟睡中的我們肯定無(wú)法馬上展開(kāi)調(diào)查。雖然sar會(huì)一直守護(hù)在服務(wù)器身邊,幫我們收集這段時(shí)間內(nèi)到底哪些資源的使用率居高不下,但卻無(wú)法揭示問(wèn)題出現(xiàn)的實(shí)際原因。引發(fā)負(fù)載過(guò)高的原因多種多樣,其中包括DoS攻擊、垃圾郵件攻擊、php腳本設(shè)計(jì)不當(dāng)、網(wǎng)絡(luò)蜘蛛在繪制網(wǎng)絡(luò)圖譜時(shí)太過(guò)積極、硬件故障、針對(duì)用戶(hù)MySQL數(shù)據(jù)庫(kù)的磁盤(pán)寫(xiě)入量暴增等等。

好消息是,大家可以利用工具收集這些信息,并在負(fù)載過(guò)高后將結(jié)果自動(dòng)發(fā)送過(guò)來(lái)。如何實(shí)現(xiàn)?從進(jìn)程列表入手:

代碼: 

  1. [user@host ~]$ ps auxwwwf 

我創(chuàng)建了一個(gè)shell腳本,以我曾經(jīng)管理過(guò)的服務(wù)器上的一套perl腳本為基礎(chǔ)。這套腳本與其它服務(wù)器監(jiān)控工具(例如Nagios)配合起來(lái)給我的工作帶來(lái)諸多便利。它能檢查六種不同項(xiàng)目(下面將詳細(xì)介紹),并在進(jìn)程列表中的條目超出閾值時(shí)向我發(fā)送郵件通知。

注意:cPanel公司對(duì)該腳本的開(kāi)發(fā)、維護(hù)或技術(shù)支持不承擔(dān)責(zé)任。請(qǐng)不要就這款腳本提出服務(wù)申請(qǐng)。如果您在使用中遇到任何問(wèn)題,請(qǐng)到相關(guān)論壇上發(fā)帖或請(qǐng)教有經(jīng)驗(yàn)的系統(tǒng)管理員。cPanel不提供與此腳本相關(guān)的任何支持。

它所檢查的具體資源對(duì)象如下:

  • 一分鐘平均負(fù)載
  • 虛擬內(nèi)存使用數(shù)量(單位為KB)
  • 內(nèi)存使用數(shù)量(單位為KB)
  • 每秒接收數(shù)據(jù)包數(shù)量
  • 每秒發(fā)出數(shù)據(jù)包數(shù)量
  • 進(jìn)程總數(shù)

如何使用腳本

要自動(dòng)運(yùn)行此腳本,大家需要設(shè)置一項(xiàng)cron任務(wù)并根據(jù)實(shí)際情況設(shè)定運(yùn)行頻率。我發(fā)現(xiàn)每五分鐘運(yùn)行一次是個(gè)不錯(cuò)的選擇。該腳本無(wú)需使用root身份運(yùn)行,既然如此我們也就不必為其分配高權(quán)限。

如果上述監(jiān)控資源對(duì)象中的某一項(xiàng)超過(guò)用戶(hù)自定義的閾值,腳本會(huì)自動(dòng)發(fā)送一封電子郵件,其中包含當(dāng)前進(jìn)程列表內(nèi)容。

電子郵件的主題行如下所示:

代碼:

  1. server.example.com [L: 35] [P: 237] [Swap Use: 1% ] [pps in: 54  pps out: 289] 

下面我們一一解釋其中的條目:

  • L代表一分鐘平均負(fù)載
  • P代表當(dāng)前進(jìn)程列表中的進(jìn)程數(shù)量
  • Swap Usage代表虛擬內(nèi)存使用百分比
  • pps in代表每秒接收數(shù)據(jù)包數(shù)量
  • pps out代表每秒發(fā)出數(shù)據(jù)包數(shù)量

#p#

腳本使用前的注意事項(xiàng)

重要事項(xiàng):大家需要根據(jù)自己的理解來(lái)調(diào)整腳本中的數(shù)值。完美的默認(rèn)值設(shè)定并不存在,因?yàn)椴煌姆?wù)器環(huán)境在實(shí)際運(yùn)行中所應(yīng)遵循的標(biāo)準(zhǔn)也不一樣。舉例來(lái)說(shuō),擁有十六個(gè)CPU核心的服務(wù)器在一分鐘平均負(fù)載方面肯定要高于只擁有一個(gè)CPU核心的服務(wù)器。

注意:大家需要將自己的電子郵箱地址添加到EMAIL變量當(dāng)中,如下所示:

代碼:

  1. EMAIL=you@example.com 

以下五項(xiàng)也需要根據(jù)實(shí)際情況加以調(diào)整:

  • MAX_LOAD
  • MAX_SWAP_USED
  • MAX_MEM_USED
  • MAX_PPS_OUT
  • MAX_PPS_IN

代碼:

  1. #!/bin/sh 
  2. export PATH=/bin:/usr/bin 
  3. ########################################################################## 
  4. #                                                                        # 
  5. #  Copyright Jeff Petersen, 2009 - 2013                                  # 
  6. #                                                                        # 
  7. #  This program is free software: you can redistribute it and/or modify  # 
  8. #  it under the terms of the GNU General Public License as published by  # 
  9. #  the Free Software Foundation, either version 3 of the License, or     # 
  10. #  (at your option) any later version.                                   # 
  11. #                                                                        # 
  12. #  This program is distributed in the hope that it will be useful,       # 
  13. #  but WITHOUT ANY WARRANTY; without even the implied warranty of        # 
  14. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         # 
  15. #  GNU General Public License for more details.                          # 
  16. #                                                                        # 
  17. #  You should have received a copy of the GNU General Public License     # 
  18. #  along with this program.  If not, see <http://www.gnu.org/licenses/>. # 
  19. #                                                                        # 
  20. ########################################################################## 
  21. ############################################################################### 
  22. # START USER CONFIGURABLE VARIABLES 
  23. ############################################################################### 
  24. EMAIL="you@example.com" 
  25. # 1 minute load avg 
  26. MAX_LOAD=3 
  27. # kB 
  28. MAX_SWAP_USED=1000 
  29. # kB 
  30. MAX_MEM_USED=500000 
  31. # packets per second inbound 
  32. MAX_PPS_IN=2000 
  33. # packets per second outbound 
  34. MAX_PPS_OUT=2000 
  35. # max processes in the process list 
  36. MAX_PROCS=400 
  37. ############################################################################### 
  38. # END USER CONFIGURABLE VARIABLES 
  39. ############################################################################### 
  40. IFACE=`grep ETHDEV /etc/wwwacct.conf | awk '{print $2}'` 
  41. if [[ "$IFACE" =~ "venet" ]] ; then 
  42. IFACE=venet0 
  43. fi 
  44. IFACE=${IFACE}: 
  45. ############################################################################### 
  46. # 1 min load avg 
  47. ############################################################################### 
  48. ONE_MIN_LOADAVG=`cut -d . -f 1 /proc/loadavg` 
  49. echo "1 minute load avg: $ONE_MIN_LOADAVG" 
  50. ############################################################################### 
  51. # swap used 
  52. ############################################################################### 
  53. SWAP_TOTAL=`grep ^SwapTotal: /proc/meminfo | awk '{print $2}'` 
  54. SWAP_FREE=`grep ^SwapFree: /proc/meminfo | awk '{print $2}'` 
  55. let "SWAP_USED = (SWAP_TOTAL - SWAP_FREE)" 
  56. echo "Swap used: $SWAP_USED kB" 
  57. ############################################################################### 
  58. # mem used 
  59. ############################################################################### 
  60. MEM_TOTAL=`grep ^MemTotal: /proc/meminfo | awk '{print $2}'` 
  61. MEM_FREE=`grep ^MemFree: /proc/meminfo | awk '{print $2}'` 
  62. let "MEM_USED = (MEM_TOTAL - MEM_FREE)" 
  63. echo "Mem used: $MEM_USED kB" 
  64. ############################################################################### 
  65. # packets received 
  66. ############################################################################### 
  67. PACKETS_RX_1=`grep $IFACE /proc/net/dev | awk '{print $2}'` 
  68. sleep 2; 
  69. PACKETS_RX_2=`grep $IFACE /proc/net/dev | awk '{print $2}'` 
  70. let "PACKETS_RX = (PACKETS_RX_2 - PACKETS_RX_1) / 2" 
  71. echo "packets received (2 secs): $PACKETS_RX" 
  72. ############################################################################### 
  73. # packets sent 
  74. ############################################################################### 
  75. PACKETS_TX_1=`grep $IFACE /proc/net/dev | awk '{print $10}'` 
  76. sleep 2; 
  77. PACKETS_TX_2=`grep $IFACE /proc/net/dev | awk '{print $10}'` 
  78. let "PACKETS_TX = (PACKETS_TX_2 - PACKETS_TX_1) / 2" 
  79. echo "packets sent (2 secs): $PACKETS_TX" 
  80. let "SWAP_USED = SWAP_TOTAL - SWAP_FREE" 
  81. if [ ! "$SWAP_USED" == 0 ] ; then 
  82. PERCENTAGE_SWAP_USED=`echo $SWAP_USED / $SWAP_TOTAL | bc -l` 
  83. TOTAL_PERCENTAGE=`echo ${PERCENTAGE_SWAP_USED:1:2}%` 
  84. else 
  85. TOTAL_PERCENTAGE='0%' 
  86. fi 
  87. ############################################################################### 
  88. # number of processes 
  89. ############################################################################### 
  90. MAX_PROCS_CHECK=`ps ax | wc -l` 
  91. send_alert() 
  92. SUBJECTLINE="`hostname` [L: $ONE_MIN_LOADAVG] [P: $MAX_PROCS_CHECK] [Swap Use: $TOTAL_PERCENTAGE ] [pps in: $PACKETS_RX  pps out: $PACKETS_TX]" 
  93. ps auxwwwf | mail -s "$SUBJECTLINE" $EMAIL 
  94. exit 
  95. if   [ $ONE_MIN_LOADAVG -gt $MAX_LOAD      ] ; then send_alert 
  96. elif [ $SWAP_USED       -gt $MAX_SWAP_USED ] ; then send_alert 
  97. elif [ $MEM_USED        -gt $MAX_MEM_USED  ] ; then send_alert 
  98. elif [ $PACKETS_RX      -gt $MAX_PPS_IN    ] ; then send_alert 
  99. elif [ $PACKETS_TX      -gt $MAX_PPS_OUT   ] ; then send_alert 
  100. elif [ $MAX_PROCS_CHECK -gt $MAX_PROCS ] ; then send_alert 
  101. fi 

需要注意的是,進(jìn)程列表的輸出內(nèi)容中包含一些有用的數(shù)列,涉及各個(gè)進(jìn)程的CPU與內(nèi)存使用情況:

  • %CPU
  • %MEM
  • VSZ
  • RSS
  • TIME (顯示一個(gè)進(jìn)程的存在時(shí)間)

我們可以通過(guò)多種方式剖析服務(wù)器負(fù)載高企的原因。下面我們列出幾項(xiàng)常用方案--僅供參考,并不全面:

  • 利用mysqladmin processlist (或者簡(jiǎn)寫(xiě)為'mysqladmin pr')檢查MySQL進(jìn)程列表
  • 利用mytop檢查MySQL進(jìn)程列表
  • 查閱日志文件。了解服務(wù)器自身的反饋意見(jiàn)也很重要。您的服務(wù)器是否遭遇暴力破解?
  • 運(yùn)行dmesg以檢查可能存在的硬件故障
  • 利用netstat查看服務(wù)器連接

下面則是值得關(guān)注的日志文件及其保存路徑:

  • 系統(tǒng)日志: /var/log/messages, /var/log/secure
  • SMTP日志: /var/log/exim_mainlog, /var/log/exim_rejectlog, /var/log/exim_paniclog
  • POP3/IMAP日志: /var/log/maillog
  • Apache日志: /usr/local/apache/logs/access_log, /usr/local/apache/logs/error_log, /usr/local/apache/logs/suexec_log, /usr/local/apache/logs/suphp_log
  • 網(wǎng)站日志: /usr/local/apache/domlogs/ (use this to find sites with traffic in the last 60 seconds: find -maxdepth 1 -type f -mmin -1 | egrep -v 'offset|_log$')
  • Cron日志: /var/log/cron

大家也可以在評(píng)論欄中反饋您在工作中遇到的問(wèn)題、對(duì)本篇文章的評(píng)論及其它任何希望與朋友們分享的信息。作為一篇獨(dú)立的指導(dǎo)性文章,我們不可避免會(huì)存在遺漏或者疏忽,期待您提出寶貴意見(jiàn)、也希望大家能從中受到一點(diǎn)啟發(fā)。

原文鏈接:

http://forums.cpanel.net/f34/troubleshooting-high-server-loads-linux-servers-319352.html

責(zé)任編輯:黃丹 來(lái)源: 51CTO.com
相關(guān)推薦

2013-03-25 09:19:10

Linux服務(wù)器故障排查

2013-03-26 09:21:40

Linux服務(wù)器故障排查

2009-08-18 14:57:40

服務(wù)器故障排查

2012-09-21 10:36:54

PHPPHP搭建Web

2010-01-04 15:19:52

2010-11-22 13:28:28

服務(wù)器硬件故障

2019-06-03 15:02:06

2009-12-04 09:47:47

LinuxNFS服務(wù)器

2019-12-09 10:40:15

YAMLBashKubernetes

2025-01-23 08:38:46

2010-08-03 17:47:04

NFS服務(wù)器

2024-12-04 16:44:51

2017-01-05 13:41:56

2017-12-04 10:03:45

2009-04-22 17:03:40

Linux服務(wù)器七要素

2009-06-27 20:20:00

LinuxNFS故障

2019-12-03 10:16:45

服務(wù)器負(fù)載系統(tǒng)

2022-04-18 09:07:54

Linux網(wǎng)絡(luò)延遲

2010-08-31 17:37:22

DHCP服務(wù)器故障

2009-09-17 15:48:58

WSUS服務(wù)器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)