歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> Linux常見技術支持問題十一則

Linux常見技術支持問題十一則

日期:2017/2/27 14:24:39   编辑:更多Linux
  解答Linux技術支持中常見的十一個問題,例如多重啟動、性能調整、文件同步、改變文件清單默認顯示方式、多台機器的時鐘同步、郵件備份,等等。   1 我想要讓Apache為大量的連接提供服務。為了減小創建進程所需要的時間,我把Apache子進程數量配置為固定的1000。系統的性能很差,有時甚至拒絕連接。你有什麼建議嗎?   A:看來你很可能遇到了一個通常稱為“thundering herd”(異乎尋常地聚集)的問題。Apache和Linux的文檔都詳細地說明了這個問題,你可以用幾種方法來解決它。   在Linux中,這種情形通常從進程“wake”(喚醒)發展而來。當一個新到達的連接要求Apache/Linux提供服務時,系統向所有正在休眠的進程發出通知。這時,所有這些進程會試圖獲得對新連接的控制權。但是,它們之中只有一個能夠獲得成功,所有其他進程都將失敗並轉入休眠狀態。這被稱為“wake all”(全部喚醒)。Linux 2.2和更早的內核都按照這種方式進行處理。   當正在休眠的Apache進程比較少時,它不會成為問題。通常,Apache會利?***ttpd.conf中的MinSpareServers和MaxSpareServers配置變量調整休眠進程的數量。然而,如果MaxSpareServer值高得異乎尋常,那麼它可能導致性能問題。我通常把MaxSpareServer值設置為MaxClients值的百分之五到十之間。   如果你的MaxSpareServers值高得異乎尋常,只要減小這個值就可以立即提高性能。   一些內核不會遇到這個問題,因為它們具有一種利用“wake one”(喚醒一個)的能力,“wake one”允許為每個連接請求喚醒一個進程。BSD具有這個能力,Linux 2.4內核也一樣。   為了利用“wake one”能力,編譯Apache的時候必須指定一個特殊的選項。如果為2.4內核配置Apache,在編譯之前請按照下面的示例執行命令,它將改善具有“wake one”能力的內核的性能:   # CFLAGS='-DSINGLE_LISTEN_UNSERIALIZED_ACCEPT' ./configure   為給數量巨大的網絡連接提供服務,Apache提供了許多調整參數。Apache有一個固定的最大允許連接數量限制,如果要把它設置成大於256,你必須重新編譯Apache。   另外,為了適應大規模服務的要求,Linux也需要進行一些文件系統方面的調整。你還要檢查一下Linux通過編譯方式固定的進程、系統級、用戶級限制。   簡而言之,當你為了巨大的Apache進程/連接數量而進行調整時,有大量的因素必須考慮。“thundering herd”也許是被忽視最多的問題,但其它需要考慮的因素還有很多。   欲知更多為了提高連接數量而調整Apache的信息,請訪問http://linuXPerf.nl.linux.org/webserving。   2 我得到了一個服務器上的帳號。由於管理員推薦使用ssh,這個帳號被禁止使用telnet和FTP。什麼是ssh?如何使用?他們為什麼要禁用telnet?   A:ssh是“secure shell”的簡稱,它完全可以替代telnet。ssh也有一個文件復制命令,即scp(安全拷貝),利用這個命令可以在不同的機器之間移動文件。   由於telnet和ftp的設計不是很安全,許多管理員禁用了telnet和ftp。用telnet和ftp協議登錄服務器時,密碼以明文的形式發送給服務器,懷有惡意的人可能監聽網絡上傳輸的數據包,進而得到用戶的登錄信息。雖然發生這種事情的可能性不大,但如果使用象ssh之類的協議,我們可以完全防止這類事情發生。   在使用方法上,ssh和telnet很相似。然而,ssh不僅加密登錄名字和密碼,而且加密整個傳輸過程。因此,ssh能夠防止任何在你和服務器之間的第三者看到傳輸內容。   有一個廣受歡迎的免費ssh實現,它屬於Ope****SD系統,但也可以在Linux上運行。OpenSSh可以從http://ftp.ope****sd.org/pub/Ope****SD/...al-solution)。   安裝好ssh之後,我們可以很方便地在遠程服務器上利用ssh獲得一個shell。例如,假設我執行:  # ssh [email protected]   首先我看到系統提示輸入密碼,輸入後我就在遠程機器上獲得了一個shell。從這裡開始,ssh的會話過程和telnet會話相似。不同之處在於,我能夠確信所有在我和服務器之間傳輸的數據都已經經過加密。   如果你很熟悉rsh和它的選項,那麼你很快就可以開始使用ssh。ssh被設計成和rsh具有相同的運作方式。一般情況下,能夠用rsh作為傳輸端口的程序都允許用ssh來替代(例如rsync)。   安全復制命令scp的用法也很簡單,它的語法和cp的語法很相似。例如,要把index.PHP文件復制到dtype.org服務器,則我們使用如下命令:   # scp index.php [email protected]:/usr/local/apache/htdocs/   此時,我們將看到密碼輸入提示(正如ssh)。接下來,本地機器當前目錄下的index.php文件被復制到dtype.org的/usr/local/apache/htdocs/,使用的登錄名字是dtype。   要了解有關OpenSSh的更多信息,請參見http://www.openssh.com,從這裡你可?..榈南晗桿得鳌?/a>   3 我有一台便攜計算機。我想要保證便攜機和台式機上都有最新的數據文件。你有何建議?   A:有一個優秀的工具rsync能夠完成這個任務。rsync提供了一種保持兩組文件相同的方法。它以Andrew Tridgell(SAMBA項目的創始人)設計的算法為基礎。Andrew Tridgell的算法允許只傳輸對文件的改動。   rsync一般被看成是一個標准的系統工具,因此你的系統上很可能已經安裝了rsync。如果它還沒有安裝,那麼你的Linux安裝盤上應該有它的包文件,或者你也可以從http://rsync.samba.org下載最新的源?..c是否已經安裝。   要保持文件同步,所有機器(在本例中,這是指你的便攜計算機和台式機)都必須安裝rsync。另外,這兩台機器應該能夠通過網絡互相看到對方。   我強烈建議用ssh作為兩台機器之間的通信機制。但還有其他幾種配置rsync傳輸器的方法,包括rsh和rsync daemon模式,rsync文檔對此有詳細說明。請參見本文有關ssh的說明了解更多信息。  rsync命令的語法和cp命令很相似。從本質上看,你是在把文件從一個位置復制到另一個位置,但rsync多了幾個cp命令沒有的選項。和通常的文件復制相比,文件同步最大的不同之處是你必須指定一台非本地的機器(比如你的台式機)。   你應該仔細考慮哪些文件要在機器之間保持同步。最好把這些文件放到便攜計算機的某個專用目錄,避免同步那些不需要同步的文件。例如,你的主目錄下可能有數百兆浏覽器緩沖數據。通常情況下,你不會想要傳輸這些數據。   我在自己的台式機器上創建了一個/home/drew/data目錄,用這個目錄來保存所有數據文件;為了簡便起見,我在便攜機上也創建了哪柯肌?  為了用rsync把文件從台式機同步到便攜機,我在便攜機上輸入下面的命令:   # rsync -vazu -e ssh --delete drew@desktopname:/home/drew/data/ /home/drew/data/   這個命令告訴rsync利用ssh把台式機上的/home/drew/data目錄復制到便攜機的同一目錄。為了讓這個命令能夠順利執行,我必須能夠在不依賴rsync的情況下用ssh進入drew@desktopname。如果你不能,請檢查並確保ssh已經正確安裝且可以運行。   下面是對上述命令的分析:-v選項告訴rsync輸出詳細提示信息;-a選項要求rsync以“archive”模式作,此時rsync將復制目錄、符號連接等;-z選項用於傳輸時壓縮數據;-u選項表示“只進行更新”,防止rsync覆蓋便攜機上比台式機新的文件。要讓這個選項能夠正確發揮作用,兩台機器的系統時鐘必須同步。   我用-e ssh選項強制rsync用ssh作為傳輸機制。默認情況下,rsync將使用rsh。--delete選項有點危險,它告訴rsync刪除便攜機上所有在台式機上不存在的文件。剛開始使用rsync命令時,我建議你不要加上這個選項,直到你熟悉了rsync命令的語法以及該選項的後果。   要把文件從便攜機同步到台式機時,我在台式機上執行一個相似的命令:   # rsync -vazu -e ssh /home/drew/data/ drew@desktop   name:/home/drew/data/   注意這次我省略了--delete選項,這是因為對於台式機,我寧願不使用自動刪除功能。你可能想要加上這個選項,但應該小心。   rsync命令還有其他許多選項,你可以通過man文檔查看這些選項,或者訪問http://rsync.samba.org。   4 我想要保證幾台機器的系統時鐘同步,有什麼簡便方法嗎?   A:ntpdate程序正是為這個目的設計,而且它很簡單易用。它使用一種協議查詢一個或多個時間服務器,然後為你的機器設置正確的系統時間。  首先你應該確定使用哪一個時間服務器。雖然你可以設置自己的某一台機器作為時間服務器,然後用這台機器同步其他機器的時鐘,但我不推薦這麼做。這種做法要求你自己完成額外的管理工作,而且你必須保證時間服務器的時鐘精確。   我更喜歡以那些正式的時間服務器為參考,然後同步所有自己的機器。你可以從http://tycho.usno.navy.mil/ntp.Html...衿鞯囊桓銮宓?/a>   ntpdate命令的語法很簡單,但必須用root身份運行它。你可以在命令行中指定一個或者多個時間服務器,下面我要使用的是USNO清單中的前面三個。這樣,ntpdate將能夠選擇一個最好的時間服務器進行同步。   # ntpdate ntp2.usno.navy.mil tock.usno.navy.mil tick.usno.navy.mil   14 Nov 17:19:04 ntpdate[16015]: adjust time server 192.5.41.40 offset -0.017641 sec   為了保證時鐘精確,我們可以把ntpdate命令放入crontab。但是,對於那些不是一直開啟的機器(比如便攜機),這個命令放入啟動腳本或手工運行更合適。   必須指出的是,ntpdate設置的是系統時鐘,但它不設置硬件時鐘(電池供電的時鐘)。要讓硬件時鐘反應系統時鐘的值,請使用如下命令:   # hwclock -systohc   如果ntpdate還沒有安裝到系統上,它應該可以從Linux安裝盤安裝。有關ntpdate命令的更多說明,請參見這個命令的man文檔。   5 在一台雙重啟動的機器上,我把




Copyright © Linux教程網 All Rights Reserved