當前位置:首頁 » 操作系統 » linuxswapin

linuxswapin

發布時間: 2022-07-28 18:34:36

linux下查看swap分區被哪些進程佔用實現腳本

使用proc文件系統中的smaps來查找這個問題。下邊是一個列出所有進程佔用swap分區情況的列表。可以通過簡單修改就可以用於統計在/proc/$PID/smaps查出。以下是腳本:

復制代碼代碼如下:

for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -k2nr

❷ Linux系統中的swap分區 怎麼弄了,電腦啟動的時候會被掛載嗎

swap這個是交換分區 ,相當於win下的的虛擬內存。會自己掛載的,lz的問題沒遇到過。幫頂下等高手來解答吧

❸ 怎樣分析linux的性能指標

LR

監控

UNIX/Linux

系統方法

一、准備工作:

1.

可以通過兩種方法驗證伺服器上是否配置

rstatd

守護程序:

①使用

rup

命令,它用於報告計算機的各種統計信息,其中就包括

rstatd

的配置信息。使用命



rup

10.130.61.203,

此處

10.130.61.203

是要監視的

linux/Unix

伺服器的

IP

,如果該命令返回相關的

統計信息。則表示已經配置並且激活了

rstatd

守護進程;若未返回有意義的統計信息,或者出現一

條錯誤報告,則表示

rstatd

守護進程尚未被配置或有問題。

②使用

find

命令

#find / -name rpc.rstatd,

該命令用於查找系統中是否存在

rpc.rstatd

文件,如果沒有,說明系統沒

有安裝

rstatd

守護程序。

2



linux

需要下載

3

個包:



1



rpc.rstatd-4.0.1.tar.gz



2



rsh-0.17-14.i386.rpm



3



rsh-server-0.17-14.i386.rpm

3

.下載並安裝

rstatd

如果伺服器上沒有安裝

rstatd

程序(一般來說

LINUX

都沒有安裝)

,需要下載一個包才有這個服



,









rpc.rstatd-4.0.1.tar.gz.













,









,











rstatd









http://sourceforge.net/projects/rstatd

這個地址下載)下載後,開始安裝,安裝步驟如下:

tar -xzvf rpc.rstatd-4.0.1.tar.gz

cd rpc.rstatd-4.0.1/

./configure

—配置操作

make

—進行編譯

make install

—開始安裝

rpc.rstatd

—啟動

rstatd

進程



rpcinfo -p

」命令來查看當前系統是否已經啟動了

rstatd

守護進程

只要保證

Linux

機器上的進程里有

rstatd



xinetd

這二個服務就可以用

LR

去監視了,通過以下

兩點可以檢查是否啟動:

1

)檢查是否啟動

: rsh server

監聽的

TCP



514



[root@mg04 root]# netstat -an |grep 514

tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN

如果能看到

514

在監聽說明

rsh

伺服器已經啟動。

2

)檢查是否啟動

: rstatd

輸入命令

: rpcinfo -p

如果能看到類似如下信息:

程序版本協議埠

100001

5

udp

937

rstatd

100001

4

udp

937

rstatd

100001

3

udp

937

rstatd

100001

2

udp

937

rstatd

100001

1

udp

937

rstatd

那就說明

rstatd

服務啟動了

,(

當然這里也可以用

ps ax

代替

)

4

.安裝

rsh



rsh-server

兩個服務包方法

a.

卸載

rsh

# rpm



q

rsh----------

查看版本號

# rpm

-e

版本號

---------

卸載該版本。

b

.安裝

# rpm



ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm

在啟動

rpc.rstatd

時,

會報錯



Cannot register service: RPC: Unable to receive; errno = Ction refused





解決方法如下:

# /etc/init.d/portmap start

# /etc/init.d/nfs start

然後再次啟動

rpc.rstatd

就好了。

5

.安裝

xinetd

方法:

①查看

xinetd

服務:

[root@localhost ~]# rpm -q xinetd

xinetd-2.3.14-10.el5

②安裝

xinetd

服務:

[root@localhost ~]# yum install xinetd

如果安裝不起

xinetd

服務,執行下列操作命令後再次執行

yum install xinetd

命令進行安裝:

yum clean packages

清除緩存目錄下的軟體包

yum clean headers

清除緩存目錄下的

headers

yum clean oldheaders

清除緩存目錄下舊的

headers

yum clean, yum clean all (= yum clean packages; yum clean oldheaders)

清除緩存目錄下的軟體包

及舊的

headers



6

.啟動

xinetd

服務:

在有的系統中,通過如下命令重啟:

# service xinetd reload

# /sbin/service xinetd rstart



suse linux

中如下操作:

cd /etc/init.d/xinetd restart

2



安裝完成後配置

rstatd

目標守護進程

xinetd,

它的主配置文件是

/etc/xinetd.conf ,

它裡面內容是

一些如下的基本信息:

#

# xinetd.conf

#

# Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.

# Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.

#

defaults

{

log_type

= FILE /var/log/xinetd.log

log_on_success = HOST EXIT DURATION

log_on_failure = HOST ATTEMPT

#

only_from

= localhost

instances

= 30

cps

= 50 10

#

# The specification of an interface is interesting, if we are on a firewall.

# For example, if you only want to provide services from an internal

# network interface, you may specify your internal interfaces IP-Address.

#

#

interface

= 127.0.0.1

}

includedir /etc/xinetd.d

我們這里需要修改的是

/etc/xinetd.d/

下的三個

conf

文件

rlogin

,rsh,rexec

這三個配置文件

,

打這

三個文件里的

disable = yes

都改成

disable = no ( disabled

用在默認的

{}

中禁止服務

)

或是把

# default:

off

都設置成

on

這個的意思就是在

xinetd

啟動的時候默認都啟動上面的三個服務

!

說明:我自己在配置時,沒有

disable = yes

這項,我就將

# default: off

改為:

default: on

,重啟後

(cd /etc/init.d/./xinetd restart

)通過

netstat -an |grep 514

查看,沒有返回。然後,我就手動在三個文

件中最後一行加入

disable

=

no

,再重啟

xinetd

,再使用

netstat

-an

|grep

514

查看,得到

tcp

0

0

0.0.0.0:514 0.0.0.0:* LISTEN

結果,表明

rsh

伺服器已經啟動。

看到網上有的地方說使用如下命令:

# service xinetd reload

# /sbin/service xinetd rstart

不知道是在什麼系統用的。

二、監控

linux

資源:



controller

中,將

System resource Graphs

中的

Unix resources

拖到右側的監控區域中,並單擊

滑鼠右鍵選擇「

Add

Measurements



,

在彈出的對話框中輸入被監控的

linux

系統的

IP

地址,然後選

擇需要監控的性能指標,並點擊「確定」

,出現如下結果:

Monitor name :UNIX Resources. Cannot initialize the monitoring on 10.10.15.62.

Error while creating the RPC client. Ensure that the machine can be connected and that it runs the

rstat daemon (use rpcinfo utility for this verification).

Detailed error: RPC: Failed to create RPC client.

RPC-TCP: Failed to establish RPC server address.

RPC-TCP: Failed to communicate with the portmapper on host '10.10.15.62'.

RPC: RPC call failed.

RPC-TCP: recv()/recvfrom() failed.

RPC-TCP: Timeout reached. (entry point: CFactory::Initialize). [MsgId: MMSG-47190]

檢查原因,發現是

Linux

系統中的防火牆開啟了並且阻擋了

LoadRunner

監控

Linux

系統的資源,

因此要將防火牆關閉。

關閉防火牆:

[root@localhost ~]# /etc/init.d/iptables stop;

三、監控

UNIX

lr

監控

UNIX



UNIX

先啟動一

rstatd

服務

以下是在

IBM AIX

系統中啟動

rstatd

服務的方法:

1

.使用

telnet



root

用戶的身份登錄入

AIX

系統

2

.在命令行提示符下輸入:

vi /etc/inetd.conf

3

.查找

rstatd

,找到

#rstatd

sunrpc_udp

udp

wait

root /usr/sbin/rpc.rstatd rstatd 100001 1-3

4

、將

#

去掉

5



:wq

保存修改結果

6

、命令提示符下輸入:

refresh



s inetd

重新啟動服務。

這樣使用

loadrunner

就可以監視

AIX

系統的性能情況了。

註:在

HP UNIX

系統上編輯完

inetd.conf

後,重啟

inetd

服務需要輸入

inetd -c

UNIX

上也可以用

rup

命令查看

rstatd

程序是否被配置並激活



rstatd

程序已經運行,

重啟時,

先查看進程

ps -ef |grep inet



然後殺掉進程,



refresh



s inetd

進行重啟。

❹ linux swap交換空間不足怎麼辦

1、使用分區:
在安裝OS時劃分出專門的交換分區,空間大小要事先規劃好,啟動系統時自動進行mount。
這種方法只能在安裝OS時設定,一旦設定好不容易改變,除非重裝系統。
2、使用swapfile:(或者是整個空閑分區)
新建臨時swapfile或者是空閑分區,在需要時設定為交換空間,最多可以增加8個swapfile。
交換空間的大小,與CPU密切相關,在i386系中,最多可以使用2GB的空間。
在系統啟動後根據需要在2G的總容量下進行增減。
這種方法比較靈活,也比較方便,缺點是啟動系統後需要手工設置。
以下是運用swapfile增加交換空間的步驟:
涉及到的命令:

free ---查看內存狀態命令,可以顯示memory,swap,buffer cache等的大小及使用狀況;
dd ---讀取,轉換並輸出數據命令;
mkswap ---設置交換區
swapon ---啟用交換區,相當於mount
swapoff ---關閉交換區,相當於umount
步驟:
1、創建swapfile:
root許可權下,創建swapfile,假設當前目錄為"/",執行如下命令:
# dd if=/dev/zero of=swapfile bs=1024 count=500000
則在根目錄下創建了一個swapfile,名稱為「swapfile」,大小為500M,也可以把文件輸出到自己想要的任何目錄中,
個人覺得還是直接放在根目錄下比較好,一目瞭然,不容易誤破壞,放在其他目錄下則不然了;
命令中選項解釋:

---of:輸出的交換文件的路徑及名稱;
---bs:塊大小,單位byte,一般為1k即1024個byte;
---count:總塊數即空間總大小,單位為塊即k;
---if:讀取的源空閑空間,為什麼是zero,不清楚,先固定這么寫吧;
2、將swapfile設置為swap空間
# mkswap swapfile
3、啟用交換空間,這個操作有點類似於mount操作(個人理解):
# swapon swapfile
至此增加交換空間的操作結束了,可以使用free命令查看swap空間大小是否發生變化;
4、如果不再使用空間可以選擇關閉交換空間,這個操作有點類似於umount操作(個人理解)::
# swapoff swapfile
使用這種方法在每次系統啟動時都需要手動設置、開啟swapfile,比較麻煩,解決方法:
在 /etc/rc.d/rc.local 文件的末行下追加加以下內容:(編輯這個文件當然是用vi了~)
/sbin/swapon /swapfile
保存後退出,這樣在系統啟動後,swap空間就會自動載入了;
總結:在安裝OS時一定要規劃後swap大小,通常為內存的2倍,但是要考慮到以後增加內存的可能,所以可以考慮設的稍大一些,想在虛擬機裡面安裝oracle10g,發現默認的swap交換空間不滿足最低要求,因為我分配的物理內存是1G,那麼就按照要求需要2G的swap交換空間,默認只有1G的交換空間。
添加swap交換空間的步驟如下:
第一步:確保系統中有足夠的空間來用做swap交換空間,我使用的是KVM,准備在一個獨立的文件系統中添加一個swap交換文件,在/opt/image中添加2G的swap交換文件
第二步:添加交換文件並設置其大小為2G,使用如下命令

[root@sense image]# dd if=/dev/zero of=/opt/image/swap bs=1024 count=2048000
過段時間就返回如下結果:
2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB) copied, 272.867 seconds, 7.7 MB/s
第三步:創建(設置)交換空間,使用命令mkswap

[root@sense image]# mkswap /opt/image/swap
Setting up swapspace version 1, size = 2097147 kB
第四步:檢查現有的交換空間大小,使用命令free

[root@sense image]# free -m
total used free shared buffers cached
Mem: 1011 989 21 0 1 875
-/+ buffers/cache: 112 898
Swap: 1027 0 1027
或者檢查meminfo文件
grep SwapTotal /proc/meminfo
第五步:啟動新增加的2G的交換空間,使用命令swapon

[root@sense image]# swapon /opt/image/swap
第六步:確認新增加的2G交換空間已經生效,使用命令free

[[root@sense image]# free -m
total used free shared buffers cached
Mem: 1011 995 15 0 4 877
-/+ buffers/cache: 113 897
Swap: 3027 0 3027
或者檢查meminfo文件
grep SwapTotal /proc/meminfo
第七步:修改/etc/fstab文件,使得新加的2G交換空間在系統重新啟動後自動生效
在文件最後加入:

/opt/image/swap swap swap defaults 0 0
我的操作

[root@weblogic Server]# free
total used free shared buffers cached
Mem: 1785856 1753452 32404 0 38592 1036312
-/+ buffers/cache: 678548 1107308
Swap: 2064376 116 2064260

創建交換空間文件,1000M

[root@weblogic /]# dd if=/dev/zero of=/swapfile bs=1024 count=1000000
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 28.5423 seconds, 35.9 MB/s

[root@weblogic /]# mkswap swapfile
Setting up swapspace version 1, size = 1023995 kB

[root@weblogic /]# swapon swapfile 打開

[root@weblogic /]#swapoff swapfile 關閉

刪除
swapoff swapfile
rm -rf swapfile

❺ linux下查看哪些進程在佔用swap

1、使用top命令查看當前進程swap佔用
2、使用腳本文件
#!/bin/bash

# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0

done
echo "Overall swap used: $OVERALL"
注意:使用sudo或root許可權來執行該腳本,不然的話非執行用戶的進程的輸出結果為0.

❻ Linux系統怎麼調整swap分區大小

假如您不清楚swap到底是什麼,或分區的概念,那麼下面的過程對您來講可能會有一定的風險。
自己擴大Swap也是比較方便的。您必須有root許可權,過程中一定要很小心,一不小心就破壞了整個硬碟的數據,執行下面的過程之前您需要三思而行,錯誤後的後果由執行者自己承擔,我這個script只是作為參考。
1.以root進入控制台
2. #swapoff -a #停止交換分區
3. #fdisk /dev/hda #swap所在硬碟的硬碟設備文檔,可能會有所不同,您最好察看/etc/fstab 將有swap這一行的hd*後面的數字去掉
4. 在fdisk里自己操作,用d先刪除swap分區,然後再n添加分區(添加時硬碟必須要有可用空間,空間大小的參數是柱面數cylinders,不是位元組,您需要自己計算,p命令能夠看到每柱面的位元組數),然後再用t將新添的分區id改為82(linux swap類型),每一步後都用w將操作實際寫入硬碟(沒用w之前您的操作無效)。再說一遍,這步必須很小心,一弄錯您的系統可能就壞了,數據丟失。
5. #mkswap /dev/hda6 #格式化swap分區,這里的hda6要看您加完後p命令顯示的實際分區設備名
6. #swapon /dev/hda6 #看是否能夠啟動新的swap分區
7.修改/etc/fstab 中swap這一行的設備名如/dev/hda6(假如您沒改變位置,一般是和以前相同的),讓他啟動時自己載入。需要注意的是,假如您這里原來是個 LABEL=SWAP-hda6這樣的東西,那麼您有兩個選擇:第一.將他改成實際的設備名,如:/dev/hda6。第二.不改變 /etc/fstab,在第5步中用的命令行需要稍有不同 #mkswap -L SWAP-hda6 /dev/hda6 就是說格式化時為swap分區加上LABEL,該功能只有在新的發行中才支持,能夠用mkswap --help察看他是否支持-L option.
8.重啟,一切ok
Linux系統中增加Swap分區大小
一、查看系統當前的分區情況:
>free -m
total used free shared buffers cached
Mem: 438 432 6 0 8 141
-/+ buffers/cache: 282 156
Swap: 2047 1375 671
二、創建用於交換分區的文件:如果要增加2G大小的交換分區,則命令寫法如下,其中的 count 等於想要的塊大小
>dd if=/dev/zero of=/home/swap bs=block_size count=number_of_block
dd if=/dev/zero of=/home/swap bs=1024 count=2048000
2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB) copied, 60.4492 seconds, 34.7 MB/s
三、設置交換分區文件:
>mkswap /home/swap
四、立即啟用交換分區文件:
>swapon /home/swap
五、若要想使開機時自啟用,則需修改文件/etc/fstab中的swap行:
/home/swap swap swap defaults 0 0
[root@test ~]# free -m
total used free shared buffers cached
Mem: 438 433 5 0 2
267
-/+ buffers/cache: 163 275
Swap: 4047 1465 2581

❼ linux swap分區原理

swap介紹

Swap,即交換區,除了安裝Linux的時候,有多少人關心過它呢?其實,Swap的調整對Linux伺服器,特別是Web伺服器的性能至關重要。通過調整Swap,有時可以越過系統性能瓶頸,節省系統升級費用。

本文內容包括:

Swap基本原理

突破128M Swap限制

Swap配置對性能的影響

Swap性能監視

有關Swap操作的系統命令

Swap基本原理

Swap的原理是一個較復雜的問題,需要大量的篇幅來說明。在這里只作簡單的介紹,在以後的文章中將和大家詳細討論Swap實現的細節。

眾所周知,現代操作系統都實現了「虛擬內存」這一技術,不但在功能上突破了物理內存的限制,使程序可以操縱大於實際物理內存的空間,更重要的是,「虛擬內存」是隔離每個進程的安全保護網,使每個進程都不受其它程序的干擾。

Swap空間的作用可簡單描述為:當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行Swap交換。

計算機用戶會經常遇這種現象。例如,在使用Windows系統時,可以同時運行多個程序,當你切換到一個很長時間沒有理會的程序時,會聽到硬碟「嘩嘩」直響。這是因為這個程序的內存被那些頻繁運行的程序給「偷走」了,放到了Swap區中。因此,一旦此程序被放置到前端,它就會從Swap區取回自己的數據,將其放進內存,然後接著運行。

需要說明一點,並不是所有從物理內存中交換出來的數據都會被放到Swap中(如果這樣的話,Swap就會不堪重負),有相當一部分數據被直接交換到文件系統。例如,有的程序會打開一些文件,對文件進行讀寫(其實每個程序都至少要打開一個文件,那就是運行程序本身),當需要將這些程序的內存空間交換出去時,就沒有必要將文件部分的數據放到Swap空間中了,而可以直接將其放到文件里去。如果是讀文件操作,那麼內存數據被直接釋放,不需要交換出來,因為下次需要時,可直接從文件系統恢復;如果是寫文件,只需要將變化的數據保存到文件中,以便恢復。但是那些用malloc和new函數生成的對象的數據則不同,它們需要Swap空間,因為它們在文件系統中沒有相應的「儲備」文件,因此被稱作「匿名」(Anonymous)內存數據。這類數據還包括堆棧中的一些狀態和變數數據等。所以說,Swap空間是「匿名」數據的交換空間。

突破128M Swap限制

經常看到有些Linux(國內漢化版)安裝手冊上有這樣的說明:Swap空間不能超過128M。為什麼會有這種說法?在說明「128M」這個數字的來歷之前,先給問題一個回答:現在根本不存在128M的限制!現在的限制是2G!

Swap空間是分頁的,每一頁的大小和內存頁的大小一樣,方便Swap空間和內存之間的數據交換。舊版本的Linux實現Swap空間時,用Swap空間的第一頁作為所有Swap空間頁的一個「位映射」(Bit map)。這就是說第一頁的每一位,都對應著一頁Swap空間。如果這一位是1,表示此頁Swap可用;如果是0,表示此頁是壞塊,不能使用。這么說來,第一個Swap映射位應該是0,因為,第一頁Swap是映射頁。另外,最後10個映射位也被佔用,用來表示Swap的版本(原來的版本是Swap_space ,現在的版本是swapspace2)。那麼,如果說一頁的大小為s,這種Swap的實現方法共能管理「8 * ( s - 10 ) - 1」個Swap頁。對於i386系統來說s=4096,則空間大小共為133890048,如果認為1 MB=2^20 Byte的話,大小正好為128M。

之所以這樣來實現Swap空間的管理,是要防止Swap空間中有壞塊。如果系統檢查到Swap中有壞塊,則在相應的位映射上標記上0,表示此頁不可用。這樣在使用Swap時,不至於用到壞塊,而使系統產生錯誤。

現在的系統設計者認為:

  • 現在硬碟質量很好,壞塊很少。

  • 就算有,也不多,只需要將壞塊羅列出來,而不需要為每一頁建立映射。

  • 如果有很多壞塊,就不應該將此硬碟作為Swap空間使用。

  • 於是,現在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址訪問,限制為2G。

    Swap配置對性能的影響

    分配太多的Swap空間會浪費磁碟空間,而Swap空間太少,則系統會發生錯誤。

    如果系統的物理內存用光了,系統就會跑得很慢,但仍能運行;如果Swap空間用光了,那麼系統就會發生錯誤。例如,Web伺服器能根據不同的請求數量衍生出多個服務進程(或線程),如果Swap空間用完,則服務進程無法啟動,通常會出現「application is out of memory」的錯誤,嚴重時會造成服務進程的死鎖。因此Swap空間的分配是很重要的。

    通常情況下,Swap空間應大於或等於物理內存的大小,最小不應小於64M,通常Swap空間的大小應是物理內存的2-2.5倍。但根據不同的應用,應有不同的配置:如果是小的桌面系統,則只需要較小的Swap空間,而大的伺服器系統則視情況不同需要不同大小的Swap空間。特別是資料庫伺服器和Web伺服器,隨著訪問量的增加,對Swap空間的要求也會增加,具體配置參見各伺服器產品的說明。

    另外,Swap分區的數量對性能也有很大的影響。因為Swap交換的操作是磁碟IO的操作,如果有多個Swap交換區,Swap空間的分配會以輪流的方式操作於所有的Swap,這樣會大大均衡IO的負載,加快Swap交換的速度。如果只有一個交換區,所有的交換操作會使交換區變得很忙,使系統大多數時間處於等待狀態,效率很低。用性能監視工具就會發現,此時的CPU並不很忙,而系統卻慢。這說明,瓶頸在IO上,依靠提高CPU的速度是解決不了問題的。
    系統性能監視

    Swap空間的分配固然很重要,而系統運行時的性能監控卻更加有價值。通過性能監視工具,可以檢查系統的各項性能指標,找到系統性能的瓶頸。本文只介紹一下在Solaris下和Swap相關的一些命令和用途。

    最常用的是Vmstat命令(在大多數Unix平台下都有這樣一些命令),此命令可以查看大多數性能指標。

    例如:

  • vmstat 3

  • procs memory swap io system cpu

  • r b w swpd free buff cache si so bi bo in cs us sy id 0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99

  • 0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 100

  • 0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 100

  • …………

  • 1234567

  • 命令說明:
    vmstat 後面的參數指定了性能指標捕獲的時間間隔。3表示每三秒鍾捕獲一次。第一行數據不用看,沒有價值,它僅反映開機以來的平均性能。從第二行開始,反映每三秒鍾之內的系統性能指標。這些性能指標中和Swap有關的包括以下幾項:

  • procs下的w
    它表示當前(三秒鍾之內)需要釋放內存、交換出去的進程數量。

  • memory下的swpd
    它表示使用的Swap空間的大小。

  • Swap下的si,so
    si表示當前(三秒鍾之內)每秒交換回內存(Swap in)的總量,單位為kbytes;so表示當前(三秒鍾之內)每秒交換出內存(Swap out)的總量,單位為kbytes。

  • 以上的指標數量越大,表示系統越忙。這些指標所表現的系統繁忙程度,與系統具體的配置有關。系統管理員應該在平時系統正常運行時,記下這些指標的數值,在系統發生問題的時候,再進行比較,就會很快發現問題,並制定本系統正常運行的標准指標值,以供性能監控使用。

    另外,使用Swapon-s也能簡單地查看當前Swap資源的使用情況。例如:

  • ` swapon -s ` Filename Type Size Used Priority

  • /dev/hda9 partition 361420 0 3

  • 123

  • 能夠方便地看出Swap空間的已用和未用資源的大小。

    應該使Swap負載保持在30%以下,這樣才能保證系統的良好性能。

    有關Swap操作的系統命令

    增加Swap空間,分以下幾步:
    1)成為超級用戶
    $su - root

    2)創建Swap文件
    # dd if=/dev/zero of=swapfile bs=1024 count=65536
    創建一個有連續空間的交換文件。

    3)激活Swap文件
    #/usr/sbin/swapon swapfile

    swapfile指的是上一步創建的交換文件。 4)現在新加的Swap文件已經起作用了,但系統重新啟動以後,並不會記住前幾步的操作。因此要在/etc/fstab文件中記錄文件的名字,和Swap類型,如:
    /path/swapfile none Swap sw,pri=3 0 0

    5)檢驗Swap文件是否加上
    /usr/sbin/swapon -s

    刪除多餘的Swap空間。
    1)成為超級用戶

    2)使用Swapoff命令收回Swap空間。
    #/usr/sbin/swapoff swapfile

    3)編輯/etc/fstab文件,去掉此Swap文件的實體。

    4)從文件系統中回收此文件。
    #rm swapfile

    5)當然,如果此Swap空間不是一個文件,而是一個分區,則需創建一個新的文件系統,再掛接到原來的文件系統上。

❽ linux 下如何更改swap的大小

swapoff 就關掉了swap 然後用fdisk刪除swap分區, 然後用跟你磁碟格式相對應的磁碟工具將重新得到的空間擴充到你的現有分區中即可

# swapoff
# cfdisk /dev/sda1
圖形化的界面 刪除swap即可
如果你的系統是ext3格式的分區,那麼可以將刪除掉的swap佔用的空間擴充到鄰近的分區上,注意 這一步需要在livecd環境中進行
以livecd啟動, 個人建議knoppix 比較好,注意 以下的是我在虛擬機種測試的輸出, 請按照你的實際情況來操作, 千萬不可完全的照搬,否則一定會損壞數據

P.S 這個建議現在虛擬機裡面練習下,否則 以下操作對於新手來講還是有一定難度的, 倒不如重新安裝一遍來的快和安全,另外 不管內存多大, 適當預留一些swap謹防萬一是個好的預防措施...
我個人是認為 沒必要care這2g 除非你空間真的十分緊張

卸載sda1:
umount /dev/sda1
然後執行:
fsck -n /dev/sda1
輸出:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1080014/1536000 blocks
然後是:
tune2fs -O ^has_journal /dev/sda1
輸出:
tune2fs 1.38 (30-Jun-2005)
接下來運行:
fdisk /dev/sda
輸出:
(Yes, it's /dev/sda, not /dev/sda1.)
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Type m to get a list of all commands:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only
我們來列印分區表:
Command (m for help): p
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 789 6337611 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
現在,刪除第一個分區:
Command (m for help): d
Partition number (1-5): 1
然後創建一個新的sda1分區,大體事項和縮小分區步驟一:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
p
Partition number (1-4): 1
現在就該確定最開始和末尾的柱面號,首先輸出起始柱面號:
First cylinder (1-1305, default 1):
然後fdisk會告述我們可能的最大柱面號,在這里是1247,然後我們直接輸入就行了:
Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): 1247
然後看一下新的分區表:
Command (m for help): p
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 1247 10016496 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
別忘了,之前的分區是啟動分區,所以還需要做:
Command (m for help): a
Partition number (1-5): 1
最後寫入:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
然後重新啟動。還是啟動到live-CD環境中(或者rescue模式),用su命令再次切換成root用戶,然後運行:
fsck -n /dev/sda1
輸出應該是這樣的:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1047239/1536000 blocks
接下來,在新的/dev/sda1上創建日誌文件,轉換回ext3文件系統:
tune2fs -j /dev/sda1
tune2fs 1.38 (30-Jun-2005)
Creating journal inode: done
This filesystem will be automatically checked every 30 mounts or
0 days, whichever comes first. Use tune2fs -c or -i to override.
好了,這下完成了。再次重啟,啟動到你原來的系統中,看看:
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 9859036 4224032 5234348 45% /
varrun 95480 132 95348 1% /var/run
varlock 95480 0 95480 0% /var/lock
udev 10240 52 10188 1% /dev
devshm 95480 0 95480 0% /dev/shm
lrm 95480 17580 77900 19% /lib/moles/2.6.17-10-generic/volatile
df -B 4k
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 2464759 1056008 1308587 45% /
varrun 23870 33 23837 1% /var/run
varlock 23870 0 23870 0% /var/lock
udev 2560 13 2547 1% /dev
devshm 23870 0 23870 0% /dev/shm
lrm 23870 4395 19475 19% /lib/moles/2.6.17-10-generic/volatile
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.5G 4.1G 5.0G 45% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 52K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/moles/2.6.17-10-generic/volatile
fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1247 10016496 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
fdisk -s /dev/sda1
10016496

❾ Linux中關於swap,虛擬內存和page的區別

以前的操作系統是實模式,例如dos。每個時候只有一個進程在跑,這個進程使用全部的物理內存。

後來發展到保護模式,分時多進程。一個CPU上跑多個進程, 但進程不知道到底有多少內存可以用,它能訪問內存最大地址。例如16位系統就能訪問2^16byte,32位就是2^32位。但是實際上沒有那麼多內存阿?怎麼辦?保護模式就應運而生了。

假設進程是一個劉祥,裁判(系統)一發令他就開始跑步。但是裁判說給你1秒,可以跑100米。於是劉祥開始跑步(內存地址),一秒後劉祥只跑了10米,裁判吹哨說:劉祥你先歇會,我要去給王軍霞吹哨呢,現記住你跑到哪裡了(保護),等會從這里開始。裁判給王軍霞吹哨,一隻跑一秒,回來再給劉祥吹哨再跑1秒,如此往復。開始跑步的人少,劉祥還可以站在跑道上休息。後來跑步的人越來越多,跑道都擠滿了人,那麼只能把一些人移動到跑道旁的草地上休息(交換)。後來發現有些人橫七豎八的躺著,佔了不少空間,於是規定每個人只能站著(page),這樣可以容納很多的人。

swap -- 草地,就是存放page的硬碟空間。
virtual memory -- 假設劉祥跑n圈就已經是到北京的距離了,可是他們還在原地。虛擬就是不存在的。
page -- 草地上的格,每次只容納一個人。

為了提高磁碟存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache.前者針對磁碟塊的讀寫,後者針對文件inode的讀寫.這些Cache有效縮短了I/O系統調用(比如read,write,getdents)的時間.

內存活動基本上可以用3個數字來量化:活動虛擬內存總量,交換(swapping)率和調頁(paging)率.其中第一個數字表明內存的總需求量,後兩個數字表示那些內存中有多少比例正處在使用之中.目標是減少內存活動或增加內存量,直到調頁率保持在一個可以接受的水平上為止.

活動虛擬內存的總量(VM)=實際內存大小(size of real memory)(物理內存)+使用的交換空間大小(amount of swap space used)

當程序運行需要的內存大於物理內存時,UNIX系統採用了調頁機制,即系統一些內存中的頁面到磁碟上,騰出來空間供進程使用。

大多數系統可以忍受偶爾的調頁,但是頻繁的調頁會使系統性能急劇下降。

UNIX內存管理:UNIX系統通過2種方法進行內存管理,「調頁演算法」,「交換技術」。

調頁演算法是將內存中最近不常使用的頁面換到磁碟上,把常使用的頁面(活動頁面)保留在內存中供進程使用。

交換技術是系統將整個進程,而不是部分頁面,全部換到磁碟上。正常情況下,系統會發生一些交換過程。

當內存嚴重不足時,系統會頻繁使用調頁和交換,這增加了磁碟I/O的負載。進一步降低了系統對作業的執行速度,即系統I/O資源問題又會影響到內存資源的分配。

Unix的虛擬內存

Unix的虛擬內存是一個十分復雜的子系統,它實現了進程間代碼與數據共享機制的透明性,並能夠分配比系統現有物理內存更多的內存,某些操作系統的虛存甚至能通過提供緩存功能影響到文件系統的性能,各種風格的UNIX的虛存的實現方式區別很大,但都離不開下面的4個概念。

1:實際內存

實際內存是指一個系統中實際存在的物理內存,稱為RAM。實際內存是存儲臨時數據最快最有效的方式,因此必須盡可能地分配給應用程序,現在的RAM的形式有多種:SIMM、DIMM、Rambus、DDR等,很多RAM都可以使用糾錯機制(ECC)。

2:交換空間

交換空間是專門用於臨時存儲內存的一塊磁碟空間,通常在頁面調度和交換進程數據時使用,通常推薦交換空間的大小應該是物理內存的二到四倍。

3:頁面調度

頁面調度是指從磁碟向內存傳輸數據,以及相反的過程,這個過程之所以被稱為頁面調度,是因為Unix內存被平均劃分成大小相等的頁面;通常頁面大小為4KB和8KB(在Solaris中可以用pagesize命令查看)。當可執行程序開始運行時,它的映象會一頁一頁地從磁碟中換入,與此類似,當某些內存在一段時間內空閑,就可以把它們換出到交換空間中,這樣就可以把空閑的RAM交給其他需要它的程序使用。

4:交換

頁面調度通常容易和交換的概念混淆,頁面調度是指把一個進程所佔內存的空閑部分傳輸到磁碟上,而交換是指當系統中實際的內存已不夠滿足新的分配需求時,把整個進程傳輸到磁碟上,交換活動通常意味著內存不足。

vmstat監視內存性能:該命令用來檢查虛擬內存的統計信息,並可顯示有關進程狀態、空閑和交換空間、調頁、磁碟空間、CPU負載和交換,cache刷新以及中斷等方面的信息。

Procs

r: The number of processes waiting for run time.

運行的和等待(CPU時間片)運行的進程數,這個值也可以判斷是否需要增加CPU(長期大於1)

b: The number of processes in uninterruptable sleep.

處於不可中斷狀態的進程數,常見的情況是由IO引起的

w: The number of processes swapped out but otherwise runnable.

Memory

swpd: the amount of virtual memory used (kB).

free: the amount of idle memory (kB).

空閑的物理內存

buff: the amount of memory used as buffers (kB).

作為buffer cache的內存,對塊設備的讀寫進行緩沖

cache: the amount of memory used as cache.

Swap

si: Amount of memory swapped in from disk (kB/s). 虛擬內存的頁導入(從SWAP DISK導入RAM)

so: Amount of memory swapped to disk (kB/s). 虛擬內存的頁導出.

❿ Linux查看佔用swap的進程腳本

linux查看佔用swap的進程腳本01#!/bin/bash0203##############################################################################04#
腳本功能

列出正在佔用swap的進程。05###############################################################################0607echo
-e
PID/t/tSwap/t/tProc_Name0809#
拿出/proc目錄下所有以數字為名的目錄(進程名是數字才是進程,其他如sys,net等存放的是其他信息)10for
pid
in
`ls
-l
/proc
|
grep
^d
|
awk
'{
print
$9
}'|
grep
-v
[^0-9]`11do12
#
讓進程釋放swap的方法只有一個:就是重啟該進程。或者等其自動釋放。放13
#
如果進程會自動釋放,那麼我們就不會寫腳本來找他了,找他都是因為他沒有自動釋放。14
#
所以我們要列出佔用swap並需要重啟的進程,但是init這個進程是系統里所有進程的祖先進程15
#
重啟init進程意味著重啟系統,這是萬萬不可以的,所以就不必檢測他了,以免對系統造成影響。16
if
[
$pid
-eq
1
];then
continue;fi17
grep
-q
Swap
/proc/$pid/smaps
2>/dev/null18
if
[
$?
-eq
0
];then19
swap=$(grep
Swap
/proc/$pid/smaps
/20
|
gawk
'{
sum+=$2;}
END{
print
sum
}')21
proc_name=$(ps
aux
|
grep
-w
$pid
|
grep
-v
grep
/22
|
awk
'{
for(i=11;i<=NF;i++){
printf(%s
,$i);
}}')23
if
[
$swap
-gt
0
];then24
echo
-e
${pid}/t${swap}/t${proc_name}25
fi26
fi27done
|
sort
-k2
-n
|
awk
-F'/t'
'{28
pid[NR]=$1;29
size[NR]=$2;30
name[NR]=$3;31}32END{33
for(id=1;id<=length(pid);id++)34
{35
if(size[id]<1024)36
printf(%-10s/t%15sKB/t%s/n,pid[id],size[id],name[id]);37
else
if(size[id]<1048576)38
printf(%-10s/t%15.2fMB/t%s/n,pid[id],size[id]/1024,name[id]);39
else40
printf(%-10s/t%15.2fGB/t%s/n,pid[id],size[id]/1048576,name[id]);41
}42}'

熱點內容
android使用at命令 發布:2025-01-18 20:54:51 瀏覽:216
phptiny 發布:2025-01-18 20:54:03 瀏覽:987
怎麼給漢字加密 發布:2025-01-18 20:49:44 瀏覽:865
遍歷javamap 發布:2025-01-18 20:39:05 瀏覽:624
我的世界租伺服器哪裡最便宜 發布:2025-01-18 20:38:50 瀏覽:564
dhcp伺服器地址租期時間怎麼調整 發布:2025-01-18 20:28:02 瀏覽:267
加密區的圖片 發布:2025-01-18 20:22:17 瀏覽:474
key文件加密 發布:2025-01-18 20:12:07 瀏覽:736
etl伺服器怎麼用 發布:2025-01-18 20:08:18 瀏覽:281
硫酸鎂演算法 發布:2025-01-18 19:53:00 瀏覽:670