/etc/passwd 檔超過1萬個 email 帳號無力~

本文講述一個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個,但現在系統還是有條不紊地進行著,運行良好。

六、體會

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

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

同時也從另一個側面告訴每一個網管人員,日常積極有效地記錄下網路的一些變動情況, 在故障出現的時候,這些資料能夠有效地爲問題分析提供資料依據。
標籤: Linux
評論: 0 | 引用: 0 | 閱讀: 4015 | 轉發
顯示Tag關聯文章
InfoBOX-2500 終身保固機種 (2009-10-15 09:39)
[ InfoBOX 伺服器使用密技] FTP 無法修改檔案權限怎麼辦? (2009-08-17 17:03)
[ InfoBOX 伺服器使用密技] 如何申請IP反解設定 (2009-08-17 11:47)
[ InfoBOX 伺服器使用密技] 如何安裝 phpBB 討論區 (2009-08-14 17:05)
[ InfoBOX 伺服器使用密技] ISP 說我的伺服器被當成跳板在亂發信 怎麼查 ? (2009-08-14 15:40)
[ InfoBOX 伺服器使用密技] 郵件伺服器 / 進階設定->防止帳號盜用機制 (2009-08-14 15:27)
[ InfoBOX 伺服器使用密技] InfoBOX 如何更新韌體? (2009-08-14 15:19)
[ InfoBOX 伺服器使用密技] 伺服器硬碟不夠用,Linux 如何換新的硬碟 (2009-08-14 14:19)
[ InfoBOX 伺服器使用密技] 伺服器故障的災難復原機制 (2009-08-14 11:41)
zimbra mail server 免費的多網域郵件伺服器 (2009-04-20 21:01)
OnlyYou人脈管理軟體應用技巧(2) 與圖片簽名檔的整合 (2009-02-11 17:22)
Damon免費網頁空間更換新主機囉! (2009-01-10 00:18)
虛擬主機 Apache 2.2.6+php5.2.3+MySQL5.0.23~自己來當戰國策 (2009-01-07 01:45)
ePowerBOX2009 上市~嵌入式Embedded Linux 網站、NAS、FTP、郵件伺服器 (2008-12-26 15:17)
[ InfoBOX 伺服器使用密技] 垃圾郵件剋星=灰名單排程功能 (2008-09-24 13:30)
Unix Like 的檔案與目錄權限說明 (2008-02-11 20:20)
rpm -qil postfix 找出套件的安裝位置 (2007-12-06 11:32)
EMOS 整理 (2007-08-31 16:33)
新增 yum 套件 4000多套 (2007-08-31 00:33)
找RPM的網址 (2007-08-29 23:57)
硬碟空間 90% 發信通知 root (2007-08-29 23:53)
Linux 可讀寫 ntfs 的方式 (2007-08-29 23:51)
透通式防火牆設定 (2007-08-29 23:47)
更換 ssh 服務程式的 Port (2007-08-10 23:45)
將寄到yahoo的信由hinet去轉寄設定 (2007-08-10 23:42)
postfix 文件 (2007-08-01 18:17)
SAMBA ACL (2007-07-30 14:22)
Embedded Linux資源好站 (2007-07-30 00:49)
ProFTP 教學 (2007-07-29 23:28)
DOM 的製作 FOR LINUX (2007-07-28 19:06)
postfix 對照表 (2007-07-16 01:25)
Rsync 控制頻寬 (2007-07-06 17:38)
AD 整合 samba 認證帳號功能 - 檢查要有 winbind (2007-07-05 11:11)
ROR on mongrel 取代 apache (2007-07-05 00:01)
CentOS5 自動安裝光碟製作 (2007-06-03 13:17)