歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

節約內存空間 優化Linux後台服務程序

每當我們裝好一個新的Linux系統,安裝向導總會幫我們默認啟動一批後台服務程序。這些程序在後台默默地完成各式各樣的任務。比如電源管理,計劃任務,系統審核等等。

  可是我們的電腦硬件千差萬別,安裝Linux的目的也千差萬別。這些後台程序往往並不適合我們的要求。其實大多數都是多余的。我們無論做為一個專業的系統管理員也好,還熱愛自己機機的用戶也好,總是無法容忍那一大堆無用的進程在跑著:占用內存,占用CPU時間,看著眼花頭暈。

  本文以CentOS和Fedora為例,詳解如何優化這些服務。

  1. 後台進程是如何啟動的?

  簡單說說:Linux有多種啟動級別。可通過查看/etc/inittab中的這一行

  id:3:initdefault:

  來得知自己的Linux的啟動級別。

  級別3不啟動X window及其相關的服務。適合做為服務器。

  級別3的後台服務啟動程序都放在/etc/rc3.d/下。S開頭的腳本表示開機時啟動,K開頭表示關機時停止。

  常用的級別還有5。以此類推。

  實際上,這些腳本只是一些鏈接,鏈到/etc/init.d/下的相應腳本。

  2. 每個服務都是干什麼的?

  可以查看這些腳本的頭幾行,一般都有一個簡短的說明。比如S26acpid

  # Description: Listen and dispatch ACPI events from the kernel

  偵聽和分發內核中的ACPI事件。

  下面說說如何優化這些進程:

  1. ntp

  我選ntp做為第一個例子。因為ntp是個挺重要的服務,但又不必作為進程在後台一直運行。

  ntp是Linux下的時間服務程序。類似Windows下的時間設置中的一項:與Internet時間同步。有了ntp,我們再也不必經常去校正電腦中的時間,只要電腦連上Internet,ntp自動為我們校正時間。

  相對於Windows, Linux下的ntp還有更多的功能,它可以把當前電腦也做為一個時間服務器,向其他電腦提供時間服務。不過這對於個人用戶來說沒啥用處。

  那麼我們的想法是:不要啟動這個服務,但是每周校正一次時間就可以了。

  做法很簡單:

  在/etc/cron.weekly/下增加一個腳本ntpdate, 腳本內容為

  #!/bin/sh

  #adjust clock weekly.

  #exec /usr/sbin/ntpdate pool.ntp.org

  exec /usr/sbin/ntpd -q

  exit 0

  腳本說明:這個腳本列出兩個ntp命令,都可以用來校正時間。任意用其中的一個就可以了。根據ntp的文檔說明,ntpdate的方式會在將來棄用,轉為ntpd -q的方式。我試了一下,在較老的Linux下,如Mandriva 2006, ntpd -q的方式不行。

  然後把腳本變成可執行的

  # chmod u+x ntpdate

  重啟crond

  # /etc/init.d/crond restart

  停止和刪除ntp服務

  # /etc/init.d/ntpd stop

  再看一下/etc/rc3.d或/etc/rc5.d下面有沒有S開頭的ntpd腳本。有的話就刪掉。這個做法看似比較暴力。“溫柔”一點的做法是運行setup或system-config-services,在圖形界面裡做。

  最後注意一點,ntp用到udp端口123作為其通訊端口。防火牆放開這個端口後,ntp才能工作。

  2. 其它cronjob的優化

  默認啟動的cronjob根據啟動的時間,分別放在

  cron.hourly

  cron.daily

  cron.weekly

  cron.monthly

  其中有些cronjob用不著做得太頻繁。雖然這些任務都是在凌晨4點左右運行的,但是也浪費呀,浪費硬盤,浪費電力...

  下面一一列出:

  makewhatis.cron 這個任務是生成或更新whatis數據庫。在操作系統沒有經常安裝卸載軟件的情況下,用不著每天都做一次。

  mlocate.cron 這個任務是生成或更新locate數據庫。道理同上。

  rpm 這個任務是列出系統安裝的rpm包,寫到一個文件裡。道理同上。

  prelink 這個任務是把操作系統裡的應用程序和動態庫“預鏈接”,加快啟動這些應用的速度。用不著每天都做,一周一次就可以了。

  可以再建一個cron.manual目錄,把不想定時運行的任務移到這個目錄下。想起來運行的時候,手工運行一下即可。

  下面是本人機器上的例子:

  [root@home etc]# ls cron*

  cron.deny  crontab

  cron.d:

  cron.daily:

  00webalizer  0anacron  0logwatch  certwatch  cups  logrotate

  cron.hourly:

  mcelog.cron

  cron.manual:

  makewhatis.cron  mlocate.cron  rpm

  cron.monthly:

  0anacron

  cron.weekly:

  0anacron  99-raid-check  ntpdate  prelink

Copyright © Linux教程網 All Rights Reserved