私のシステムはいくつかのスワップスペースを使います。
undefine@uml:~$ free
total used free shared buffers cached
Mem: 16109684 15848264 261420 633496 48668 6096984
-/+ buffers/cache: 9702612 6407072
Swap: 15622140 604 15621536
スワップ領域に何があるかどうかを確認するには?
プロセスごとに確認しようとしましたが、VmSwapシステムのすべてのpidは0です。
undefine@uml:~$ awk '/VmSwap/ {print $2}' /proc/*/status |uniq
0
交換には何が含まれますか?私はtmpfsを考えましたが、tmpfs-esのすべてのファイルを再読み込みしましたが、スワップサイズはフラッシュされません。
答え1
smem
これを行うための標準ツールです。清潔でシンプルです。
Debianベースのシステムでは、パッケージマネージャを介してインストールします。
sudo apt-get install smem
私のシステムの例(クリップ)出力:
$ smem -s swap -t -k -n
PID User Command Swap USS PSS RSS
831 1000 /bin/bash 0 3.8M 3.8M 5.5M
3931 1000 bash /usr/bin/sage -c noteb 276.0K 4.0K 20.0K 1.2M
17201 1000 /usr/bin/dbus-launch --exit 284.0K 4.0K 8.0K 500.0K
17282 1000 /usr/bin/mate-settings-daem 372.0K 11.0M 11.7M 21.8M
17284 1000 marco 432.0K 16.7M 18.1M 29.5M
17053 1000 mate-session 952.0K 3.3M 3.5M 9.2M
3972 1000 python /usr/lib/sagemath/sr 2.7M 101.8M 102.1M 104.3M
-------------------------------------------------------------------------------
141 1 5.2M 3.9G 4.0G 4.5G
答え2
私は私のニーズに合わせて昨日から調査を始めました。
SWAP_USED = プロセスで使用 + SwapCached + Part_of_Tmpfs + Something_else
フラグメント:
プロセスで使用- メモリから完全にスワップされたデータ。
キャッシュ交換- ディスクにスワップされたがメモリに残っているデータ。
一時ファイルシステム部分– tmpfs データの一部です。
非常に長い話:
プロセスで使用- これを行う方法に関する多くのガイドラインが公開されています。間違い- これを計算します;) たとえば、すべての項目を合計すると -VmSwap
過大評価が得られます(共有交換ページは複数回計算できます)。ユーザーまたはオペレーティングシステムで実行しないと、低い見積もりが自動的に返されます。共有ページを識別する正しい方法はありませんが、同じ「マップ」を使用すると、より良い結果が得られます。/proc/*/status
Swap
/proc/*/smaps
root
近似するcat
他の方法より:(以下の方法は役に立たず、実際には1つが必要であることに注意してください2>/dev/null
。)
[root@a:~]# cat /proc/*/status|awk ' /^VmSwap/{ s+=$2 }END{print s}'
32048
[root@a:~]# cat /proc/*/smaps|awk ' /^Swap/{ s+=$2 }END{print s}'
32048
[root@a:~]# cat /proc/*/smaps|awk '/-/{r=$0}/^Swap/{if(R[r]!=1)s+=$2;R[r]=1}END{print s}'
14940
[root@a:~]# free -k|grep -e Swap -e used
total used free shared buffers cached
Swap: 8388600 15508 8373092
キャッシュ交換- これは簡単できれいに抽出できます/proc/meminfo
。一部の人々は、これが「使用された」スワップと見なされるとは思わないでしょう。これは、RAMとスワップ内の同じページの重複(ダーティではない)コピーが両側からすぐに解放され(要求が発生した場合)、コピーの1つを作成できるためです。解放" "。
一時ファイルシステム部分- 良いことは、すべてのtmpfsデータが数日間接触しておらず、swappiness
ゼロ以外の場合、tmpfs全体が置き換えられる可能性が高いことです(その逆も、最近使用されたデータについて)。欠点は、スワップボリュームのしきい値または比率を安定して計算するAPIが見つからないことです。しかし、RAMが十分な場合は、tmpfsデータ全体をここにコピーして、/dev/null
スワップボリュームに関するいくつかの手がかりを得ることができます。
tmpfsサイズの計算中に犯される一般的な間違いは、これが設定された唯一のtmpfsであると仮定するか、各ファイルを再帰的にスキャンしてこれを試みることです(実装時に隠されたファイルを省略するか/dev/shm
、ファイルではなくファイルで実行する傾向があるだけでなく、root
交換プロセス)の一部ページ)。より簡単な方法は古いものを使用することですdf
。
その他diff 385 MB
- カーネルソースコードの詳細な分析が必要な以下の「」を参照してください。私のスクリプトを見てください:
#!/bin/bash
TMPFS=`df -kP |awk ' /^tmpfs/{ s+=$3 }END{print int( s/1024)}'`
PROCS=`cat /proc/*/smaps|awk '/-/{r=$0} /^Swap/{if(R[r]!=1)s+=$2;R[r]=1}END{print int( s/1024)}'`
SCACH=`cat /proc/meminfo|awk ' /^SwapCached/ {print int($2/1024)}'`
TOTAL=`free -k |awk ' /^Swap/ {print int($3/1024)}'`
echo -e " df $TMPFS\t smaps $PROCS \tSwapCache $SCACH\t| $TOTAL\tswap | diff $[TOTAL-TMPFS-PROCS-SCACH]\tMB"
そして他のボックスの出力は次のようになります。
xa002: df 0 smaps 271 SwapCache 3858 | 4120 swap | diff -9 MB
sg003: df 0 smaps 234 SwapCache 3876 | 4111 swap | diff 1 MB
sg001: df 0 smaps 245 SwapCache 3845 | 4093 swap | diff 3 MB
sg002: df 0 smaps 244 SwapCache 3843 | 4091 swap | diff 4 MB
dm001: df 2 smaps 971 SwapCache 728 | 1707 swap | diff 6 MB
hm012: df 270 smaps 161 SwapCache 29 | 454 swap | diff -6 MB
hm003: df 274 smaps 142 SwapCache 27 | 440 swap | diff -3 MB
hm006: df 262 smaps 150 SwapCache 29 | 437 swap | diff -4 MB
hm002: df 265 smaps 120 SwapCache 28 | 412 swap | diff -1 MB
hm009: df 258 smaps 124 SwapCache 33 | 410 swap | diff -5 MB
hm011: df 262 smaps 118 SwapCache 28 | 406 swap | diff -2 MB
hm008: df 245 smaps 122 SwapCache 32 | 396 swap | diff -3 MB
hm005: df 247 smaps 120 SwapCache 33 | 396 swap | diff -4 MB
dp001: df 0 smaps 0 SwapCache 0 | 386 swap | diff 386 MB
hm014: df 184 smaps 134 SwapCache 34 | 343 swap | diff -9 MB
hm007: df 0 smaps 132 SwapCache 32 | 158 swap | diff -6 MB
bm002: df 0 smaps 121 SwapCache 25 | 141 swap | diff -5 MB
dm002: df 2 smaps 70 SwapCache 71 | 139 swap | diff -4 MB
bm001: df 3 smaps 102 SwapCache 28 | 131 swap | diff -2 MB
bm004: df 0 smaps 98 SwapCache 29 | 126 swap | diff -1 MB
hm013: df 0 smaps 100 SwapCache 30 | 124 swap | diff -6 MB
bm006: df 0 smaps 103 SwapCache 15 | 122 swap | diff 4 MB
hm010: df 0 smaps 102 SwapCache 24 | 122 swap | diff -4 MB
hm001: df 0 smaps 101 SwapCache 25 | 121 swap | diff -5 MB
bm003: df 0 smaps 98 SwapCache 15 | 107 swap | diff -6 MB
bm005: df 0 smaps 70 SwapCache 17 | 85 swap | diff -2 MB
sg004: df 0 smaps 72 SwapCache 14 | 83 swap | diff -3 MB
sg001: df 0 smaps 41 SwapCache 33 | 78 swap | diff 4 MB
sg005: df 0 smaps 59 SwapCache 20 | 75 swap | diff -4 MB
sg003: df 0 smaps 58 SwapCache 18 | 72 swap | diff -4 MB
sg006: df 0 smaps 56 SwapCache 13 | 65 swap | diff -4 MB
sg002: df 0 smaps 54 SwapCache 12 | 64 swap | diff -2 MB
xa001: df 0 smaps 56 SwapCache 5 | 55 swap | diff -6 MB
そしてボーナスでちょっとした実験をしてみましょう。
[root@hm012:~]# df -h|grep -e '^Filesystem' -e '^tmpfs'
Filesystem Size Used Avail Use% Mounted on
tmpfs 12G 271M 12G 3% /dev/shm
tmpfs 8.0G 84K 8.0G 1% /tmp
[root@hm012:~]# ./get_swap.sh
df 270 smaps 161 SwapCache 29 | 454 swap | diff -6 MB
[root@hm012:~]# rm -rf /dev/shm/*
[root@hm012:~]# df -h|grep -e '^Filesystem' -e '^tmpfs'
Filesystem Size Used Avail Use% Mounted on
tmpfs 12G 0 12G 0% /dev/shm
tmpfs 8.0G 84K 8.0G 1% /tmp
[root@hm012:~]# ./get_swap.sh
df 0 smaps 161 SwapCache 29 | 185 swap | diff -5 MB
PS上記の近似に加えて、KBからMBに丸め、RAMとスワップブロックサイズ間の理論的不一致の可能性などの他のエラーの原因があります。すべての内容をすべて扱うかどうかはわかりませんが、ある程度役立つことを願っています:)