Linux服 務(wù)器 服 務(wù) 器(如RadHat系 列、Ubutu系 列、Redflag系列)作為一種優(yōu)秀的開源網(wǎng)絡(luò)操作系統(tǒng),以其卓越的穩(wěn)定性和可靠性而著稱。目前,基于Linux服務(wù)器的應(yīng)用服務(wù)器,已經(jīng)成為各種數(shù)據(jù)中心業(yè)務(wù)應(yīng)用的重點(diǎn)使用對象。筆者就多年的信息化管理工作經(jīng)驗(yàn),談一談在Linux服務(wù)器運(yùn)維中具有通示性的一些問題及對應(yīng)的解決方法或工作習(xí)慣。
系統(tǒng)管理員的責(zé)任是保持系統(tǒng)安全和順利運(yùn)行,如果不能遠(yuǎn)程登錄Linux服務(wù)器控制臺(tái),所有系統(tǒng)運(yùn)維任務(wù)都無從談起。筆者從實(shí)際工作經(jīng)驗(yàn)的角度,談一談Linux服務(wù)器無法登錄控制臺(tái)可能出現(xiàn)的問題。
1.檢查/var/log中的日志文件。/v a r/l o g/messages文件收集系統(tǒng)錯(cuò)誤,來自守護(hù)進(jìn)程的消息以及其他重要信息,它可能會(huì)表明問題的原因或更多癥狀。另外,檢查系統(tǒng)控制臺(tái),有時(shí)系統(tǒng)問題相關(guān)的消息不寫入/var/log/messages中,而是顯示在系統(tǒng)控制臺(tái)上。
2.確定是否只有一個(gè)用戶或一個(gè)用戶的終端/工作站有問題或者是否問題更廣。
3.確保該用戶的主目錄存在,并且在/etc/passwd文件中有對應(yīng)于該用戶的條目。驗(yàn)證該用戶擁有其主目錄和啟動(dòng)文件,并且它們是可讀的(而且該用戶對其主目錄有可執(zhí)行權(quán)限的情況下)。確認(rèn)在/etc/passwd中的該用戶登錄shell條目是準(zhǔn)確的,并且存在指定的shell。
4.檢查該用戶的啟動(dòng)文 件(.profile、.login、.bashrc等)。該用戶可能已對這些文件之一進(jìn)行了編輯,并引入了禁止登錄的語法錯(cuò)誤。
5.使用df來檢查整個(gè)文件系統(tǒng)。如果/tmp文件系統(tǒng)或該用戶的主目錄已滿,登錄有時(shí)會(huì)以意想不到的方式失敗。在某些情況下,可能能夠登錄到文本環(huán)境,但不能登錄到圖形環(huán)境。用戶登錄時(shí)啟動(dòng)的應(yīng)用程序無法創(chuàng)建臨時(shí)文件,或無法更新用戶主目錄中的文件時(shí),登錄過程本身可能會(huì)終止。
6. 使 用 HTTPS、SSH、LDAP尤其是kerberos等加密登錄方法時(shí),時(shí)鐘設(shè)置的時(shí)間不同可能會(huì)導(dǎo)致登錄失敗。還要確保DNS正常工作。一些網(wǎng)絡(luò)服務(wù)與名稱解析的相關(guān)性比較強(qiáng),包括反向查找(即名稱解析問題會(huì)導(dǎo)致拖慢通過SSH的連接)。
當(dāng)系統(tǒng)由于不明原因運(yùn)行緩慢時(shí),多半是大量無效的進(jìn)程一直在后臺(tái)運(yùn)行。此問題的表現(xiàn)包括很長的響應(yīng)時(shí)間和很大的系統(tǒng)負(fù)荷,如使用w或uptime所示的數(shù)據(jù)大于1.0。最好運(yùn)行top以迅速找到流氓進(jìn)程。使用ps – ef可列出所有進(jìn)程。在ps – ef輸出中要找的內(nèi)容是大量的TIME列。例如,如果Firefox進(jìn)程的TIME字段超過100.0,這一進(jìn)程有可能運(yùn)行不正常。然而,如果該用戶正在執(zhí)行大量的Java工作,并且已經(jīng)登錄很長時(shí)間,這個(gè)值就可能是正常的。檢查STIME字段以查看該進(jìn)程啟動(dòng)的時(shí)間,如果該進(jìn)程的運(yùn)行時(shí)間比用戶登錄在線的時(shí)間還長,最好終止它。
當(dāng)用戶遇到問題,并在沒有通知任何人的情況下離開無人值守的終端時(shí),最好終止該用戶擁有的所有進(jìn)程。如果用戶在控制臺(tái)上運(yùn)行GUI,終止啟動(dòng)桌面環(huán)境的進(jìn)程或窗口管理器本身。還要繼續(xù)查找包括gnomesession、startkde或其他以wm結(jié)尾的進(jìn)程名。通常窗口管理器既是第一個(gè)也是最后一個(gè)要運(yùn)行的進(jìn)程,并在用戶注銷時(shí)退出。如果終止窗口管理器不起作用,可嘗試終止X服務(wù)器進(jìn)程,這個(gè)進(jìn)程通常列為/usr/bin/Xorg。如果上述操作失敗,當(dāng)以該用戶身份登錄時(shí),通過執(zhí)行kill – 15 – 1命令或等效的kill – TERM – 1命令,可以終止用戶擁有的所有進(jìn)程。使用– 1替換進(jìn)程ID以告訴kill來給該用戶擁有的所有進(jìn)程發(fā)送信號。例如,作為root可以輸入 #su zach –c ‘kill –TERM -1’,如果不能終止所有進(jìn)程(有時(shí)TERM無法終止進(jìn)程),可以使用KILL信號(– 9)。
而lsof(列出打開的文件)實(shí)用程序會(huì)顯示打開的文件名,其選項(xiàng)僅顯示某些進(jìn)程,只有一個(gè)進(jìn)程的某些文件描述符,或只有某些網(wǎng)絡(luò)連接(網(wǎng)絡(luò)連接使用文件描述符,就像普通文件一樣,lsof 也顯示這些)。使用 ps – ef 確定了可疑進(jìn)程后,可以輸入#lsof –s –p pid,用可疑進(jìn)程的進(jìn)程ID替換PID,lsof會(huì)顯示PID進(jìn)程打開的文件描述符列表。– s選項(xiàng)顯示所有打開文件的大小,– p選項(xiàng)則允許指定感興趣的進(jìn)程PID 號(如果組合這些選項(xiàng),則lsof不會(huì)運(yùn)行)。文件大小信息用于確定該進(jìn)程是否打開了一個(gè)非常大的文件。如果是這樣,需要聯(lián)系該進(jìn)程的所有者,或者在必要情況下終止該進(jìn)程。– rn選項(xiàng)表示每n秒重新顯示一次lsof的輸出。
從理論意義上講,系統(tǒng)遲早會(huì)用完現(xiàn)有的磁盤空間,因此不要填滿一個(gè)分區(qū)。當(dāng)一個(gè)分區(qū)至少有5%至30%的剩余空間時(shí),Linux服務(wù)器寫入文件的速度明顯加快。如果一個(gè)分區(qū)的已使用空間超過其最大最優(yōu)磁盤空間,就會(huì)降低系統(tǒng)性能。另外的一個(gè)普遍的磁盤問題是碎片,當(dāng)一個(gè)文件系統(tǒng)已滿時(shí),它會(huì)變得支離破碎。這類似于DOS碎片的概念。 要檢查文件系統(tǒng)碎片,要卸載該文件系統(tǒng),并在其上運(yùn)行fsck,在 ext2、ext3和 ext4文件系統(tǒng)上使用– f選項(xiàng)。fsck的輸出包括一個(gè)文件系統(tǒng)碎片百分?jǐn)?shù)。通過備份可以整理文件系統(tǒng),首先使用mkfs做一個(gè)干凈的空映像,然后恢復(fù)文件系統(tǒng)。使用哪個(gè)工具來執(zhí)行備份和恢復(fù)并不重要。
周期性的監(jiān)控磁盤性能是運(yùn)維工程師的一個(gè)良好工作習(xí)慣,監(jiān)控Linux服務(wù)器提供了一些命令,可以報(bào)告誰正在使用哪些文件系統(tǒng)的多少磁盤空間。常見的如du-m、du –i、quota、df -h、df-a等指令。
此外,磁盤和分區(qū)的使用都不是一成不變的,運(yùn)行數(shù)據(jù)、管理日志、業(yè)務(wù)日志以及以及新增業(yè)務(wù)都是快速增長的文件,那么增加文件系統(tǒng)上的可用空間量(除了購買新硬盤)的方法都有哪些呢?壓縮文件、刪除文件、增大基于LVM的文件系統(tǒng)以及壓縮目錄是常見的選擇。
另一方面,如果一個(gè)文件系統(tǒng)很快耗盡空間(如在一個(gè)小時(shí)內(nèi),而不是幾個(gè)星期或幾個(gè)月內(nèi)),首先弄清楚空間耗盡的原因。可使用ps– ef命令來確定用戶是否已經(jīng)創(chuàng)建了失控的進(jìn)程,并且生成了巨大的文件。評估ps的輸出時(shí),可尋找一個(gè)消耗了大量CPU時(shí)間的進(jìn)程。如果這樣的進(jìn)程正在運(yùn)行,并創(chuàng)建了大文件,那該文件將持續(xù)增長以致需要不斷騰出空間。如果刪除了這個(gè)巨大的文件,其占用的空間并不會(huì)被釋放,除非終止該進(jìn)程。此時(shí)需要嘗試聯(lián)系運(yùn)行該進(jìn)程的用戶,并要求他終止該進(jìn)程,或者使用root權(quán)限,自己終止該進(jìn)程。
本文通過三個(gè)Linux服務(wù)器服務(wù)器常見問題的拋出,介紹了一些面對Linux服務(wù)器出現(xiàn)的問題常用的工作方法和思路。其實(shí)我們在每天的工作中養(yǎng)成良好的管理系統(tǒng)的習(xí)慣以及嚴(yán)格遵循軟件文檔的指示來運(yùn)維,都會(huì)降低很多潛在問題發(fā)生的可能性。同時(shí),即使解決了問題,也應(yīng)該做好日志記錄或筆頭工作,可以為問題的再次出現(xiàn)或工作的交接打好基礎(chǔ)。