2006 年 12 月 31 日
配置交換空間(包括在緊急情況下添加空間)以充分利用您的系統。在本文中,您將了解如何監視系統以確定有效的交換空間配置數據,并研究將交換空間不只是用作輔助隨機訪(fǎng)問(wèn)存儲器 (RAM) 的方法。
典型的 UNIX? 管理員擁有一套經(jīng)常用于輔助管理過(guò)程的關(guān)鍵實(shí)用工具、訣竅和系統。存在各種用于簡(jiǎn)化不同過(guò)程的關(guān)鍵實(shí)用工具、命令行鏈和腳本。其中一些工具來(lái)自于操作系統,而大部分的訣竅則來(lái)源于長(cháng)期的經(jīng)驗積累和減輕系統管理員工作壓力的要求。本系列文章主要專(zhuān)注于最大限度地利用各種 UNIX 環(huán)境中可用的工具,包括簡(jiǎn)化異構環(huán)境中的管理任務(wù)的方法。
所有 UNIX 操作系統都支持某種虛擬內存 (VM) 系統。使用 VM 系統,您有兩個(gè)主要區域來(lái)存儲有關(guān)活動(dòng)應用程序及其使用的數據的信息——物理隨機訪(fǎng)問(wèn)存儲器 (RAM) 和硬盤(pán)驅動(dòng)器上分配的空間。
在具有 VM 的計算機中,可加載到內存中的應用程序和數據量可以大于物理 RAM,因為沒(méi)有活動(dòng)地使用的應用程序和信息被交換 到了磁盤(pán)上(交換空間 這個(gè)術(shù)語(yǔ)由此得名)。
VM 系統的優(yōu)點(diǎn)在于,物理 RAM 得到了更有效的利用——這是因為它僅包含正在執行的應用程序和正在使用的數據。由于 RAM 比硬盤(pán)空間快,您從活動(dòng)地加載的應用程序中獲得了所需的性能,同時(shí)還得益于能夠運行比通常所支持的更多的應用程序。
其結果是您獲得了大得多的可尋址內存空間(在 32 為系統上為 4GB,在 64 位系統上則更大),從而使得應用程序開(kāi)發(fā)更加容易,同時(shí)仍然提供高性能。
回頁(yè)首您在計算機上配置的交換空間量主要取決于應用程序和操作系統。如果交換空間太小,則可能無(wú)法運行您希望運行的所有應用程序,而如果交換空間太大,則可能在浪費那些從未使用的磁盤(pán)空間。您可能還會(huì )間接地使得系統過(guò)載,因為與太小的交換空間相比,太大的交換空間會(huì )導致糟糕的性能,這是由于與系統執行實(shí)際處理所花的時(shí)間相比,它在換入和換出頁(yè)面上所花的時(shí)間更多。
不同的 UNIX 變體以不同的方式使用它們的交換空間。有些變體僅在已經(jīng)使用完物理內存時(shí)才使用交換空間。其他變體則對所有非活動(dòng)的應用程序和未使用的頁(yè)面使用交換空間。有些變體保留所有應用程序中的數據副本——同時(shí)包括內存和交換空間中的應用程序。缺省情況下,有些變體避免使用交換空間,并盡可能提供某種機制來(lái)允許您調整交換空間的使用方式。許多變體使用這些不同安排的組合來(lái)充分利用它們的交換空間。
例如在 Linux? 中,當您使用 2.6 內核時(shí),可以通過(guò)設置 /etc/sysctl.conf 中的 vm.swappiness 值來(lái)調整系統的 swappiness。較高的值導致交換更多頁(yè)面,較低的值導致將更多應用程序保留在內存中(即使這些應用程序處于空閑狀態(tài))。
除了這些基礎之外,還有許多關(guān)于應該如何配置 VM 和應該分配多少磁盤(pán)空間的觀(guān)點(diǎn)和規則。下面總結了其中一些方法:
有些管理員認為,您的交換空間決不應該少于物理 RAM。由于其中的 VM 使用方式,這是較舊的 UNIX 版本(尤其是 SunOS)的一個(gè)要求。從理論上講,擁有比物理 RAM 更多的 VM 可以使操作系統能夠在系統變得空閑時(shí)將所有當前進(jìn)程換出到磁盤(pán)上,并且能夠提高系統的性能,因為可以將新進(jìn)程直接加載到 RAM 中,而不必預先交換應用程序。
對于開(kāi)發(fā)系統,許多管理員都贊成應該有與 RAM 一樣多的 VM。采用這種方法的原因在于,交換空間還在系統故障期間用作轉儲活動(dòng)內存的位置;然后可以在啟動(dòng)期間重新加載所存儲的內存轉儲,并將其保存為內核核心文件。如果所配置的交換空間小于物理 RAM,此類(lèi)轉儲就無(wú)法實(shí)現。
在高性能部署環(huán)境中,由于您只希望將應用程序活動(dòng)地保留在內存中,并且不需要大量的交換,您可以配置盡可能小的 VM。崩潰恢復不是必需的,而確定物理 RAM 的潛在缺乏(由于交換空間用盡)的能力可以提供警告,使您知道應用程序環(huán)境未得到優(yōu)化或者您需要升級 RAM。
對于桌面環(huán)境,擁有非常大的 VM 分配可能對您有利,因為它使您能夠運行大量的應用程序(其中許多應用程序可能是空閑的,可以容易地交換,從而使更多 RAM 對活動(dòng)應用程序可用)。
選擇正確的交換空間量很大程度上取決于您所配置的平臺——其預期用途和您希望如何處理可用 VM 缺乏的情況。
下面是一些保守值:
在桌面系統上,至少分配與物理 RAM 一樣多的交換空間。
在服務(wù)器上,至少分配可用 RAM 的 50% 作為交換空間。一旦頭腦中有了大體數字,您就需要配置交換空間。
回頁(yè)首所有 UNIX 系統都有多種類(lèi)型的交換空間。主交換空間是通常在啟動(dòng)時(shí)配置的交換空間,并且通常是作為操作系統安裝的一部分來(lái)設置的。所有 UNIX 系統通常都有一個(gè)主交換空間分配。
交換空間的創(chuàng )建和配置方式隨不同的系統而異。在 Linux 下,用于交換的磁盤(pán)分區是通過(guò)分區 ID 來(lái)標識的,該分區必須通過(guò) mkswap 命令來(lái)初始化: $ mkswap /dev/sda2
在大多數傳統 UNIX 環(huán)境中,您可以使用任何可用分區而無(wú)需進(jìn)行任何準備工作。在 HP-UX、AIX? 和 Linux 上,您可以使用 swapon 命令來(lái)將分區添加到可用的交換空間: $ swapon /dev/sda2
在 Solaris 上,您可以使用 swap 命令來(lái)將交換空間添加到系統: $ swap -a /dev/dsk/c0t0d0s2
請注意,以這種方式添加的交換空間在重新啟動(dòng)后不會(huì )保留。若要永久地將交換空間添加到系統,您必須配置啟動(dòng)配置文件之一來(lái)自動(dòng)啟用交換空間分配。
回頁(yè)首在大多數 UNIX 變體下,交換空間都是作為內核初始化的一部分在啟動(dòng)時(shí)自動(dòng)添加的。大多數變體使用文件系統安裝文件(/etc/fstab、/etc/vfstab 或 /etc/filesystems)中的行來(lái)指定要用作交換空間的分區。您可以從 Solaris 的 /etc/vfstab 文件中看到這樣一個(gè)示例(請參見(jiàn)
清單 1)。
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # fd - /dev/fd fd - no - /proc - /proc proc - no - /dev/dsk/c0d0s1 - - swap - no - /dev/dsk/c0d0s0 /dev/rdsk/c0d0s0 / ufs 1 no - /dev/dsk/c0d0s7 /dev/rdsk/c0d0s7 /export/home ufs 2 yes - /devices - /devices devfs - no - ctfs - /system/contract ctfs - no - objfs - /system/object objfs - no - swap - /tmp tmpfs - yes -
清單 2 顯示了 Linux 中的 /etc/fstab 文件示例。
# <fs> <mountpoint> <type> <opts> <dump/pass> /dev/sda1 /boot ext2 noauto,noatime 1 1 /dev/sda3 / ext3 noatime 0 0 /dev/sda2 none swap sw 0 0 /dev/hda1 /var/lib/mysql ext3 noatime 1 2 /dev/hdb1 /export/data ext3 noatime 1 2 /dev/hde1 /export/home ext3 noatime 1 2 /dev/hde2 /var/tmp ext3 noatime 1 2 /dev/hde3 /usr/portage/distfiles ext3 noatime 1 2 /dev/hde4 /tmp ext3 noatime 1 2 /dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0 none /proc proc defaults 0 0
最后,您可以在 AIX 中使用 /etc/swapspaces 文件來(lái)配置交換空間分區(請參見(jiàn)
清單 3)。
* This file is modified by the chps, mkps and rmps commands and referenced * by the lsps and swapon commands. hd6: dev = /dev/hd6 paging00: dev = /dev/paging00 paging01: dev = /dev/paging01
您應該使用對應的命令或 Smitty 工具來(lái)修改該文件內容,而不要直接編輯該文件。
若要刪除額外的交換空間,您可以使用對應的 swapoff 或 swap -d 命令來(lái)禁用該交換分區。然而要注意,您只能禁用當前未使用的交換分區,并且不能禁用主交換分區。
有時(shí)您可能會(huì )用盡已配置的交換空間分區,從而在短時(shí)間內需要更多 VM,直到您能夠組織某種更永久性的解決方案。如果有某個(gè)分區可用,您可以按照上面在
配置交換分區部分中的介紹來(lái)準備它。
如果沒(méi)有空余的分區可用,您可以創(chuàng )建一個(gè)或多個(gè)文件,并將它們臨時(shí)添加到可用交換池中。大多數系統甚至允許您在 NFS 安裝的文件系統上使用交換文件,當您沒(méi)有本地磁盤(pán)空間可用時(shí),就可以使用這樣的文件系統。
若要將文件用于交換空間,請首先創(chuàng )建一個(gè)適當的文件。mkfile> 命令在這里最合適,因為它提供了創(chuàng )建大型文件的簡(jiǎn)單方法。您可以在命令行指定文件名和文件大?。?$ mkfile 512m /export/data/swapfile
然后可以像添加分區一樣添加該文件: $ swap -a /export/data/swapfile or $ swapon /export/data/swapfile
以這種方式使用的交換文件通常決不是針對交換空間問(wèn)題的長(cháng)期解決方案。您應該盡快為交換空間配置專(zhuān)用分區。
回頁(yè)首交換空間及其使用情況的監視包括兩個(gè)方面:當前使用情況和活動(dòng)使用情況。您可以在各種 UNIX 變體中找到一批不同的工具,它們報告可用空閑內存和 VM 使用情況以及當前使用情況。
在 Solaris 下,swap 工具提供了大多數交換接口功能,包括報告使用情況和可用設備。例如,若要獲得已配置的交換設備列表,可參見(jiàn)
清單 4。
$ swap -l swapfile dev swaplo blocks free /dev/dsk/c0d0s1 102,1 8 1220928 1220928
在
清單 4 中,您可以看到您有一個(gè)完全未使用的交換設備。
在 AIX 下,您可以使用 lsps 工具來(lái)獲得同樣的信息(請參見(jiàn)
清單 5)。
$ lsps -a Page Space Physical Volume Volume Group Size %Used Active Auto hd6 hdisk0 rootvg 2048MB 3 yes yes
在 Linux 下,您可以使用 swapon 工具,如
清單 6 所示。
$ swapon -s Filename Type Size Used Priority /dev/sda2 partition 1004052 319744 -1
對于 HP-UX,您可以使用 swapinfo,如
清單 7 所示。
swapinfo -t Kb Kb Kb PCT START/ Kb TYPE AVAIL USED FREE USED LIMIT RESERVE PRI NAME dev 2097152 0 2097152 0% 0 - 1 /dev/vg00/lvol2 reserve - 1468224 -1468224 memory 3299740 1220268 2079472 37% total 5396892 2688492 2708400 50% - 0 -
在上述每個(gè)示例中,您都可以看到可用交換空間位置列表及其用途,并大致了解交換空間的當前使用量情況。
這些快照視圖非常有用,但它們僅顯示了當前使用情況。其中有關(guān)交換空間的定期或全面使用情況的信息非常少。出于性能的考慮,或者在診斷您懷疑可能與交換空間有關(guān)的問(wèn)題時(shí),您通常需要內存和分頁(yè)使用情況的更加交互式的視圖。
vmstat 命令可以提供虛擬內存使用情況的長(cháng)期視圖,包括提供有關(guān)交換空間與 RAM 之間正在活動(dòng)地交換的內存量的信息。在命令行上,您需要指定要在報告統計信息時(shí)使用的間隔(以秒為單位)。結果輸出顯示了大量的信息,并且可用于做出有關(guān) VM 配置和分配的決策。
清單 8 顯示了針對 Solaris 計算機的輸出示例(間隔為五秒)。
kthr memory page disk faults cpu r b w swap free re mf pi po fr de sr cd cd cd cd in sy cs us sy id 0 0 0 945932 385632 9 36 13 0 1 0 100 3 0 0 0 413 172 87 0 36 63 0 0 0 944616 384068 0 8 3 0 0 0 0 0 0 0 0 654 21 51 0 1 99 0 0 0 944612 384064 0 0 0 0 0 0 0 0 0 0 0 596 21 52 0 1 99 0 0 0 944612 384064 0 0 0 0 0 0 0 0 0 0 0 694 12 48 0 1 99 0 0 0 944612 384064 0 0 0 0 0 0 0 5 0 0 0 658 11 50 0 1 99 0 0 0 944612 384064 0 0 0 0 0 0 0 0 0 0 0 576 18 52 0 1 99 0 0 0 944500 383988 115 850 1 0 0 0 0 0 0 0 0 612 1656 120 1 5 94 0 0 0 942060 382444 6 62 0 0 0 0 0 0 0 0 0 669 256 146 0 2 98 0 0 0 942048 382432 9 105 0 0 0 0 0 0 0 0 0 699 414 188 0 2 98 0 0 0 946188 388188 481 2400 10 10 10 0 0 5 0 0 0 595 12613 6082 6 18 76 0 0 0 944488 386308 769 4753 1 8 8 0 0 7 0 0 0 625 15705 6285 8 29 63 0 0 0 943128 385104 839 5194 176 9 9 0 0 14 0 0 0 579 16077 6304 8 32 60 0 0 0 937692 377628 32 209 2 0 0 0 0 2 0 0 0 654 403 131 0 2 97 0 0 0 937228 377208 0 0 0 0 0 0 0 0 0 0 0 647 38 63 0 1 99 0 0 0 937220 377200 121 980 0 0 0 0 0 0 0 0 0 623 1246 218 1 6 93 0 0 0 937348 377320 126 1044 2 1 1 0 0 3 0 0 0 667 1266 228 1 7 93 0 0 0 937428 377408 57 686 0 0 0 0 0 0 0 0 0 702 890 180 1 5 94 0 0 0 937436 377404 72 861 0 0 0 0 0 54 0 0 0 689 1113 295 1 6 93
其中存在許多列——有些列比另一些列更重要。關(guān)鍵的列包括:
swap——顯示可用的總交換空間
free——顯示空閑的交換空間量
pi——換入的千字節數
po——換出的千字節數
fr——空閑的千字節數
非常低的空閑空間量和較高的換入或換出頁(yè)數可能表明 VM 不足,非常高的換入和換出頁(yè)數可能表明物理 RAM 不足。
回頁(yè)首在某些 UNIX 變體下,特別是 Solaris 和 Linux,您可以使用 tmpfs 文件系統;該文件系統使用 VM 作為存儲空間。當您有充足的 RAM 時(shí),這提供了支持超快速磁盤(pán)訪(fǎng)問(wèn)的理想方法;未使用的文件將交換到磁盤(pán)上。其結果是實(shí)現了快速訪(fǎng)問(wèn)最常用文件的高效解決方案,并且它可以顯著(zhù)提高應用程序速度,例如軟件開(kāi)發(fā),其中要在編譯過(guò)程期間創(chuàng )建大量的臨時(shí)文件。
正確配置交換空間可以對計算機效率產(chǎn)生巨大的影響。大多數人設置并遺忘他們的交換空間設置,不過(guò)在本文中,您研究了幾種添加和調整交換空間的方法。您還看到了如何向您的配置永久地添加交換空間,以及如何在內存不足時(shí)緊急添加交換空間。
學(xué)習
您可以參閱本文在 developerWorks 全球站點(diǎn)上的
英文原文 。
系統管理工具包:查看本系列的其他部分。
Solaris to Linux Migration: A Guide for System Administrators:不同的系統使用不同的工具,這本 IBM 紅皮書(shū)幫助您識別一些重要工具。
探索 Linux 內存模型(developerWorks,2006 年 2 月):這篇文章幫助您了解 Linux 如何使用內存、交換空間,以及如何在這兩者之間交換內存頁(yè)和進(jìn)程。
讓 UNIX 和 Linux 一起工作(developerWorks,2006 年 4 月):這篇文章是讓傳統 UNIX 分發(fā)版與 Linux 一起工作的指南。
在 Bash shell 中工作(developerWorks,2006 年 5 月):學(xué)習該教程以了解如何使用 Bourne Again Shell 來(lái)進(jìn)行所有工作,包括自定義和擴展環(huán)境的方法。
Bash:Bash 是標準 Bourne Shell 的替代 Shell,并且與之具有類(lèi)似的語(yǔ)法,但同時(shí)具備大量的新特性,包括別名、作業(yè)控制以及文件和目錄名自動(dòng)完成。
developerWorks “AIX and UNIX”專(zhuān)區提供了關(guān)于 AIX 系統管理的各個(gè)方面和擴展您的 UNIX 技能的大量信息。
developerWorks 技術(shù)事件和網(wǎng)絡(luò )廣播:跟蹤最新的 developerWorks 技術(shù)事件與網(wǎng)絡(luò )廣播。
AIX 5L Wiki:訪(fǎng)問(wèn)這個(gè) AIX 相關(guān)技術(shù)信息的協(xié)作環(huán)境。
播客:收聽(tīng)播客并與 IBM 技術(shù)專(zhuān)家保持同步。
瀏覽
技術(shù)書(shū)店以查找相關(guān)的圖書(shū)和其他技術(shù)主題。
獲得產(chǎn)品和技術(shù)
IBM 試用軟件:使用 IBM 軟件開(kāi)發(fā)您的下一個(gè)項目,可直接從 developerWorks 下載這些試用軟件。
Martin Brown 成為一名職業(yè)作家已經(jīng)有 8 年多的時(shí)間了。他是很多書(shū)籍和文章的作者,內容涉及很多主題。他的特長(cháng)包括很多開(kāi)發(fā)語(yǔ)言和平臺 —— Perl、Python、Java、JavaScript、Basic、Pascal、Modula-2、C、C++、Rebol、Gawk、Shellscript、Windows、Solaris、Linux、BeOS、Mac OS/X 等等 —— 還包括 Web 編程、系統管理和集成。他會(huì )定期為 ServerWatch.com、LinuxToday.com 和 IBM developerWorks 撰寫(xiě)文章,在 Computerworld、Apple Blog 以及其他站點(diǎn)都會(huì )定期更新自己的 blogger,同時(shí)還為 Microsoft 撰寫(xiě)一些主題文章。您可以通過(guò)
questions@mcslp.com 與他聯(lián)系。