作者 主題: 我的 E-Mail 伺服器為什麼變慢了?  (閱讀 10800 次)

0 會員 與 1 訪客 正在閱讀本文。

protech

  • 活潑的大學生
  • ***
  • 文章數: 322
  • 性別: 男
    • 檢視個人資料
我的 E-Mail 伺服器為什麼變慢了?
« 於: 2002-10-22 15:23 »
摘要

  本文講述一個E-Mail伺服器突然變慢後的觀察、分析、解決過程。(2002-10-22 08:44:27)

By 風過留楓

  一切本來都是那樣的寧靜,所有的網路服務都在默默地工作著。然而近一段時間來,經常有人打電話反映一個相同的問題:在接收E-Mail時,伺服器端經常應答超時,從而無法正常收到 E-Mail,但如果過一會兒再收,則又可能正常接收到。大家對此表現出了很大的不滿。因此,我 們就迅速動手尋找問題的根源,以爭取儘快修復這個故障。

 一、查閱基本資訊

   首先我們翻看了歸檔資料,確定了E-Mail運行在一個配置爲PIII 500MHz,128M記憶體,20G硬 盤的工控機上,作業系統是Redhat Linux 6.5,使用Sendmail做爲E-Mail Server,並且採用系統的 passwd文件做爲Sendmail郵件用戶的認證文件。

   根據網管日誌記載該郵件系統的用戶在這一段時間以來發展十分迅速,用戶數從1萬名增加 到了超過2萬名。

 二、初步分析

   通過上面資訊的瞭解,我們基本上確認速度變慢的主要的原因是用戶量的增長。因此,在 這此前提下進行了分析。

  我們在Linux控制臺下,輸入以下命令查看系統的進程情況:

    ps –auxw

  我們發現,該命令列出了大量的發送郵件和POP進程。然後根據網管日誌的記錄,分別在低 峰、平均、高峰期間進行了並發用戶數的檢查,發現在高峰情,並發的用戶數已從原來的20個 用戶上升到了40個用戶。

  到此爲止,我們得出了初步的結論:由於用戶的不斷增長,並發用戶也越來越多,使得機 器無法處理完這些並發請求,以致E-Mail伺服器對用戶回應過慢,甚至超時而無法使用。因此, 我們認爲解決這一故障的辦法就是升級機器。

三、深入分析

  但是,我們突然間又注意到了40這個數位,我們覺得現在使用的E-Mail Server伺服器的性能 不應該無法處理40個用戶同時訪問的呀。我們隱隱感覺得前面的分析有一定有什麽地方疏忽 了,以至得到了一個並不正確的結果。

  因此,我們便查看了另外一台配置相同,正在運行WEB服務的伺服器,我們發現該伺服器 在同時處理50個用戶訪問時,並沒有感到處理能力不足。

  這時,我們開始進一步分析E-Mail服務的整個過程。首先用戶的郵件接收程式通過POP協定 與伺服器的POP模組進行通訊,並提供用戶名與密碼;接著E-Mail伺服器的POP模組要將用戶提 供的密碼進行加密;然後與系統文件/etc/passwd中的用戶密碼進行逐行匹配,並找出相應的用戶 名,再進行第二次匹配;如果匹配成功,校驗通過,否則就返回用戶名或密碼不正確。校驗通 過後,伺服器開始將屬於該用戶的郵件傳送給用戶的郵件接收程式。 這時,我們想到了,所有 的用戶連接都有一個共同的環節,那就是都要打開系統文件/etc/passwd,進行用戶的驗證,會不 會是因此帶來瓶頸問題呢?

  我們就在Linux控制臺上輸入以下命令,查看使用/etc/passwd文件有多少個進程:

    fuser /etc/passwd

  這時,列出了很多POP進程,癥結總算找到了。原來是因爲系統文件/etc/passwd是一個文本 文件,在用戶名、密碼的匹配過程中,是採用逐行進行匹配,而我們的/etc/passwd文件有2萬多 行,因此最好的情況下是第一次匹配就成功,最壞的情況就是2萬多次後才匹配成功,因此平均 需要1萬次的匹配。該過程所消耗的時間足以使得電子郵件接收程式超時,而無法等到匹配結束。

四、解決方法

   故障的根源找到了,解決方法也就自然簡單。因爲伺服器POP模組通過搜索密碼文件驗證一 個用戶的身份所需的時間很長,使得進程産生了積累,從而事實上加重了系統的負擔,即此時 正在使用郵件接收程式的用戶在長時間內仍保持連接狀態,而無法正常進行下一步的工作。所 以主要是解決方法就是將採用文件文件/etc/passwd的方法轉成資料庫形式。因此可以採用以下兩 種方法之一解決:

   1)使用Linux的NIS系統,將系統的密碼文件/etc/passwd轉換成爲NIS的資訊庫。由於NIS採用 的是資料庫引擎,所以運行起來,便於查找,效率可以大大提高。

   2)重新配置Sendmail,使其不採用系統文件/etc/passwd來進行用戶校驗,而是採用一個特定 的資料庫存儲,由於也是採用了資料庫引擎,所以運行起來,便於查詢,效率也可以大大提 高。

   你還可以採用Postfix等內建資料庫支援的E-Mail系統來替換Sendmail,由於Postfix可以直接在 Sendmail基礎上實現資料的自動轉換,因些整個操作十分簡單。

 五、解決效果

   我們最後採用了Postfix替換Sendmail,將其用戶密碼列表轉換成爲資料庫模式,問題就迎刃 而解。現在我們仍然在使用這台機器,而且用戶已經增長到3萬個,高峰時期用戶的並發數也已 經從40個上升到60-70個,但現在系統還是有條不紊地進行著,運行良好。

 六、體會

   在這個簡單的例子中,我們深深地感受到在日常的系統管理工作中必須仔細地分析問題, 而不要輕易地將問題歸結於伺服器硬體能力上。

   主要的辦法是:認真地、實事求是地檢查每個進程在做什麽;認真地研究服務的整個流 程,分析問題最可能發生的地方;然後設計相應的檢測工作,收集情況,對其論證。只有這樣 才能夠最終定位問題,並在此基礎上提出行之有效的解決方案,最終解決問題。

   同時也從另一個側面告訴每一個網管人員,日常積極有效地記錄下網路的一些變動情況, 在故障出現的時候,這些資料能夠有效地爲問題分析提供資料依據。

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #1 於: 2002-10-22 21:47 »
嗯  !這一篇建議應放入精華區
=========================
http://www.kuolung.net
==========================

cisco3662

  • 鑽研的研究生
  • *****
  • 文章數: 739
    • 檢視個人資料
Re: 我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #2 於: 2002-10-25 00:24 »
引述: "protech"
摘要

  本文講述一個E-Mail伺服器突然變慢後的觀察、分析、解決過程。(2002-10-22 08:44:27)

By 風過留楓

  一切本來都是那樣的寧靜,所有的網路服務都在默默地工作著。然而近一段時間來,經常有人打電話反映一個相同的問題:在接收E-Mail時,伺服器端經常應答超時,從而無法正常收到 E-Mail,但如果過一會兒再收,則又可能正常接收到。大家對此表現出了很大的不滿。因此,我 們就迅速動手尋找問題的根源,以爭取儘快修復這個故障。

 一、查閱基本資訊

   首先我們翻看了歸檔資料,確定了E-Mail運行在一個配置爲PIII 500MHz,128M記憶體,20G硬 盤的工控機上,作業系統是Redhat Linux 6.5,使用Sendmail做爲E-Mail Server,並且採用系統的 passwd文件做爲Sendmail郵件用戶的認證文件。

   根據網管日誌記載該郵件系統的用戶在這一段時間以來發展十分迅速,用戶數從1萬名增加 到了超過2萬名。

 二、初步分析

   通過上面資訊的瞭解,我們基本上確認速度變慢的主要的原因是用戶量的增長。因此,在 這此前提下進行了分析。

  我們在Linux控制臺下,輸入以下命令查看系統的進程情況:

    ps –auxw

  我們發現,該命令列出了大量的發送郵件和POP進程。然後根據網管日誌的記錄,分別在低 峰、平均、高峰期間進行了並發用戶數的檢查,發現在高峰情,並發的用戶數已從原來的20個 用戶上升到了40個用戶。

  到此爲止,我們得出了初步的結論:由於用戶的不斷增長,並發用戶也越來越多,使得機 器無法處理完這些並發請求,以致E-Mail伺服器對用戶回應過慢,甚至超時而無法使用。因此, 我們認爲解決這一故障的辦法就是升級機器。

三、深入分析

  但是,我們突然間又注意到了40這個數位,我們覺得現在使用的E-Mail Server伺服器的性能 不應該無法處理40個用戶同時訪問的呀。我們隱隱感覺得前面的分析有一定有什麽地方疏忽 了,以至得到了一個並不正確的結果。

  因此,我們便查看了另外一台配置相同,正在運行WEB服務的伺服器,我們發現該伺服器 在同時處理50個用戶訪問時,並沒有感到處理能力不足。

  這時,我們開始進一步分析E-Mail服務的整個過程。首先用戶的郵件接收程式通過POP協定 與伺服器的POP模組進行通訊,並提供用戶名與密碼;接著E-Mail伺服器的POP模組要將用戶提 供的密碼進行加密;然後與系統文件/etc/passwd中的用戶密碼進行逐行匹配,並找出相應的用戶 名,再進行第二次匹配;如果匹配成功,校驗通過,否則就返回用戶名或密碼不正確。校驗通 過後,伺服器開始將屬於該用戶的郵件傳送給用戶的郵件接收程式。 這時,我們想到了,所有 的用戶連接都有一個共同的環節,那就是都要打開系統文件/etc/passwd,進行用戶的驗證,會不 會是因此帶來瓶頸問題呢?

  我們就在Linux控制臺上輸入以下命令,查看使用/etc/passwd文件有多少個進程:

    fuser /etc/passwd

  這時,列出了很多POP進程,癥結總算找到了。原來是因爲系統文件/etc/passwd是一個文本 文件,在用戶名、密碼的匹配過程中,是採用逐行進行匹配,而我們的/etc/passwd文件有2萬多 行,因此最好的情況下是第一次匹配就成功,最壞的情況就是2萬多次後才匹配成功,因此平均 需要1萬次的匹配。該過程所消耗的時間足以使得電子郵件接收程式超時,而無法等到匹配結束。

四、解決方法

   故障的根源找到了,解決方法也就自然簡單。因爲伺服器POP模組通過搜索密碼文件驗證一 個用戶的身份所需的時間很長,使得進程産生了積累,從而事實上加重了系統的負擔,即此時 正在使用郵件接收程式的用戶在長時間內仍保持連接狀態,而無法正常進行下一步的工作。所 以主要是解決方法就是將採用文件文件/etc/passwd的方法轉成資料庫形式。因此可以採用以下兩 種方法之一解決:

   1)使用Linux的NIS系統,將系統的密碼文件/etc/passwd轉換成爲NIS的資訊庫。由於NIS採用 的是資料庫引擎,所以運行起來,便於查找,效率可以大大提高。

   2)重新配置Sendmail,使其不採用系統文件/etc/passwd來進行用戶校驗,而是採用一個特定 的資料庫存儲,由於也是採用了資料庫引擎,所以運行起來,便於查詢,效率也可以大大提 高。

   你還可以採用Postfix等內建資料庫支援的E-Mail系統來替換Sendmail,由於Postfix可以直接在 Sendmail基礎上實現資料的自動轉換,因些整個操作十分簡單。

 五、解決效果

   我們最後採用了Postfix替換Sendmail,將其用戶密碼列表轉換成爲資料庫模式,問題就迎刃 而解。現在我們仍然在使用這台機器,而且用戶已經增長到3萬個,高峰時期用戶的並發數也已 經從40個上升到60-70個,但現在系統還是有條不紊地進行著,運行良好。

 六、體會

   在這個簡單的例子中,我們深深地感受到在日常的系統管理工作中必須仔細地分析問題, 而不要輕易地將問題歸結於伺服器硬體能力上。

   主要的辦法是:認真地、實事求是地檢查每個進程在做什麽;認真地研究服務的整個流 程,分析問題最可能發生的地方;然後設計相應的檢測工作,收集情況,對其論證。只有這樣 才能夠最終定位問題,並在此基礎上提出行之有效的解決方案,最終解決問題。

   同時也從另一個側面告訴每一個網管人員,日常積極有效地記錄下網路的一些變動情況, 在故障出現的時候,這些資料能夠有效地爲問題分析提供資料依據。


這篇太棒了.....先為作者來個掌聲吧.... :lol:  :lol:

不過還有一些問題想確認一下
sendmail並不支援您所謂的資料庫模式嗎??

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7312
    • 檢視個人資料
Re: 我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #3 於: 2002-10-25 09:30 »
引述: "cisco3662"
引述: "protech"
  2)重新配置Sendmail,使其不採用系統文件/etc/passwd來進行用戶校驗,而是採用一個特定 的資料庫存儲,由於也是採用了資料庫引擎,所以運行起來,便於查詢,效率也可以大大提 高。

   你還可以採用Postfix等內建資料庫支援的E-Mail系統來替換Sendmail,由於Postfix可以直接在 Sendmail基礎上實現資料的自動轉換,因些整個操作十分簡單。

 五、解決效果

   我們最後採用了Postfix替換Sendmail,將其用戶密碼列表轉換成爲資料庫模式,問題就迎刃 而解。現在我們仍然在使用這台機器,而且用戶已經增長到3萬個,高峰時期用戶的並發數也已 經從40個上升到60-70個,但現在系統還是有條不紊地進行著,運行良好。

不過還有一些問題想確認一下
sendmail並不支援您所謂的資料庫模式嗎??


應該是有支援NIS的,
但Postfix也是個不錯的選擇...

protech

  • 活潑的大學生
  • ***
  • 文章數: 322
  • 性別: 男
    • 檢視個人資料
我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #4 於: 2002-10-25 12:23 »
很抱歉 , sendmail 我已經很久沒用了 ..

不過在原作者的文章中是有提到的 ..

你可以用下面的方式去找資料和測試 , 至於效果如何我不知道 ...

sendmail
cyrus-sasl

下面這一篇就很完整的說明 postfix 的用法 , 你參考一下吧 ..

http://www.cngnu.org/technology/Postfix_I.tw.html

G.T.O.

  • 憂鬱的高中生
  • ***
  • 文章數: 115
    • 檢視個人資料
我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #5 於: 2002-10-26 17:18 »
您好!! 不好意思 請問一下 你所提供的文章
我發現 如果系統內的mysql 是tarball 其它gcc db3 pam都是rpm
有辦法衣它的方法做下去嗎??

引述: "protech"
很抱歉 , sendmail 我已經很久沒用了 ..

不過在原作者的文章中是有提到的 ..

你可以用下面的方式去找資料和測試 , 至於效果如何我不知道 ...

sendmail
cyrus-sasl

下面這一篇就很完整的說明 postfix 的用法 , 你參考一下吧 ..

http://www.cngnu.org/technology/Postfix_I.tw.html

protech

  • 活潑的大學生
  • ***
  • 文章數: 322
  • 性別: 男
    • 檢視個人資料
我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #6 於: 2002-10-26 20:22 »
如果系統內的mysql 是tarball 其它gcc db3 pam都是rpm
有辦法衣它的方法做下去嗎??
^^^^^^^^^^^^^^^^^^^^

可以的 , 不過要注意你 mysql 當初編繹時的參數和 rpm 的參數有什麼不同 ...

G.T.O.

  • 憂鬱的高中生
  • ***
  • 文章數: 115
    • 檢視個人資料
我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #7 於: 2002-10-26 21:30 »
請教一下  那rpm的參數是怎樣?? 如何得知???謝謝!!

引述: "protech"
如果系統內的mysql 是tarball 其它gcc db3 pam都是rpm
有辦法衣它的方法做下去嗎??
^^^^^^^^^^^^^^^^^^^^

可以的 , 不過要注意你 mysql 當初編繹時的參數和 rpm 的參數有什麼不同 ...

protech

  • 活潑的大學生
  • ***
  • 文章數: 322
  • 性別: 男
    • 檢視個人資料
我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #8 於: 2002-10-26 21:51 »
拍謝啦 , 豆芽菜哇看嘸 ........  :oops:

http://mirrors.kernel.org/redhat/redhat/linux/7.3/en/doc/RH-DOCS/maximum-rpm-1.0/html/index.html

自己去看吧 ...... :lol:

liyuan

  • 懷疑的國中生
  • **
  • 文章數: 56
    • 檢視個人資料
我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #9 於: 2002-11-06 17:46 »
嗨..ALL...

剛剛看了一下postfix的安裝說明...
還有點看不懂..不過實作過應該就會比較了解了...
但是有一個問題想請教...
他的說明裡面是把IMAP跟POP3一起安裝的嗎?!因為這位高手似乎在安裝完IMAP之後,就可以啟動POP3了....這.不太懂,亦或是自行先啟動ipop3....

另外,要怎麼把已經建好的users也就是passwd內的使用者全部轉移到mySQL.
不會要一個一個轉吧....

請諸位指導....因為最近剛好要架mail server....
謝謝..

peterkim

  • 懷疑的國中生
  • **
  • 文章數: 60
    • 檢視個人資料
    • http://peterkim.hellpara.org/
我的 E-Mail 伺服器為什麼變慢了?
« 回覆 #10 於: 2003-02-08 13:21 »
把原有的系統帳號轉過來是一個蠻麻煩的過程,我也正在頭痛..