■以前、CPUとメモリの利用率をローテーション前にログに出力するスクリプトを書いた。
※今回は既知なので使用していない。
sa_report.sh
https://raw.github.com/labunix/sa_report/master/sa_report.sh
■上記でゲストOSを載せるには辛いスペックであることが分かってからは
最小限の役割にしている。
$ free
total used free shared buffers cached
Mem: 1994744 1183648 811096 0 109716 393908
-/+ buffers/cache: 680024 1314720
Swap: 1951888 0 1951888
■最小とは言え、DNSやFWを分離している程度で、
主な役割はプロキシサーバ。
メモリは多用するが、CPUはほとんど使わないはず。
$ pstree
init─┬─acpid
├─amavisd-new───2*[amavisd-new]
├─apache2─┬─apache2
│ └─2*[apache2───26*[{apache2}]]
├─clamd───{clamd}
├─cron
├─dbus-daemon
├─freshclam
├─7*[getty]
├─lwresd───3*[{lwresd}]
├─master─┬─pickup
│ ├─qmgr
│ └─tlsmgr
├─ntpd
├─postgres───4*[postgres]
├─rsyslogd───2*[{rsyslogd}]
├─smbd───smbd
├─snmpd
├─snmptrapd
├─spamd───2*[spamd]
├─squid───squid─┬─8*[squidGuard]
│ └─unlinkd
├─sshd───sshd───sshd───bash───pstree
└─udevd───2*[udevd]
■CPUは2.4GHzのAMD64bit版。
$ sudo dmidecode -t processor | grep "Current"
Current Speed: 2400 MHz
■以下のような5分に一回取得している性能情報を1時間に一回にしたい。
ディストリビューションによって異なるが、sysstatのデフォルトは大体10分か5分。
以下は15分に一回のsarログを普通に変換した場合。
$ env LANG=C sar -u -f /var/log/sysstat/sa03 | head -10 | grep ^[0-9]
00:00:01 CPU %user %nice %system %iowait %steal %idle
00:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
00:20:01 all 0.21 0.00 0.04 0.01 0.00 99.74
00:35:01 all 0.01 0.00 0.03 0.00 0.00 99.96
00:50:01 all 0.21 0.00 0.03 0.01 0.00 99.75
01:05:01 all 0.01 0.00 0.03 0.01 0.00 99.94
01:20:01 all 0.02 0.00 0.02 0.01 0.00 99.95
01:35:01 all 0.02 0.00 0.03 0.00 0.00 99.96
■一日の平均は以下で充分だとする。
$ for n in `seq -w 3 10`;do \
env LANG=C sar -u -f "/var/log/sysstat/sa${n}" | grep Average | sed s%^%"2013/02/$n,"%g; \
done
2013/02/03,Average: all 0.51 0.00 0.16 0.21 0.00 99.11
2013/02/04,Average: all 0.45 0.00 0.13 0.05 0.00 99.36
2013/02/05,Average: all 0.52 0.00 0.10 0.04 0.00 99.34
2013/02/06,Average: all 0.40 0.00 0.13 0.05 0.00 99.42
2013/02/07,Average: all 0.46 0.00 0.08 0.02 0.00 99.44
2013/02/08,Average: all 0.41 0.00 0.08 0.02 0.00 99.49
2013/02/09,Average: all 0.29 0.00 0.08 0.01 0.00 99.61
2013/02/10,Average: all 0.48 0.00 0.09 0.12 0.00 99.31
■一時間毎の性能情報を抜き出す。
$ env LANG=C sar -u -f /var/log/sysstat/sa03 | head -3 | grep %; \
env LANG=C sar -u -f /var/log/sysstat/sa03 | grep ^[0-9] | \
awk -F\: '{if ($1!=TIME){MSG=$0";"MSG;TIME=$1}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1
00:00:01 CPU %user %nice %system %iowait %steal %idle
00:00:01 all 0.00 0.00 0.02 0.00 0.00 99.98
01:05:01 all 0.01 0.00 0.03 0.01 0.00 99.94
02:05:01 all 0.02 0.00 0.02 0.01 0.00 99.95
03:05:01 all 0.02 0.00 0.02 0.01 0.00 99.95
04:05:01 all 0.02 0.00 0.03 0.01 0.00 99.94
05:05:01 all 0.02 0.00 0.03 0.00 0.00 99.95
06:05:01 all 0.02 0.00 0.02 0.01 0.00 99.95
07:05:01 all 0.01 0.00 0.02 0.01 0.00 99.95
08:05:01 all 0.02 0.00 0.02 0.01 0.00 99.95
09:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
10:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
11:05:01 all 0.20 0.00 0.40 0.05 0.00 99.34
12:05:01 all 0.16 0.00 0.28 0.34 0.00 99.21
13:05:01 all 0.02 0.00 0.03 0.00 0.00 99.95
14:05:01 all 1.08 0.00 0.11 0.01 0.00 98.80
15:05:01 all 0.65 0.00 1.65 0.43 0.00 97.27
16:05:01 all 4.99 0.00 2.39 0.38 0.00 92.24
17:05:01 all 0.15 0.00 0.19 0.33 0.00 99.33
18:05:01 all 0.10 0.00 0.14 0.43 0.00 99.33
19:05:01 all 1.15 0.00 0.21 0.20 0.00 98.45
20:05:01 all 1.06 0.00 0.09 0.07 0.00 98.78
21:05:01 all 0.11 0.00 0.63 0.24 0.00 99.02
22:05:01 all 0.60 0.00 0.05 0.06 0.00 99.29
23:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
■ユーザへのリソース割り当てが増えたタイミングを抜き出す。
$ env LANG=C sar -u -f /var/log/sysstat/sa03 | grep ^[0-9] | \
awk '{if ($3>USER){MSG=$0";"MSG;USER=$3}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1
00:00:01 CPU %user %nice %system %iowait %steal %idle
00:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
00:20:01 all 0.21 0.00 0.04 0.01 0.00 99.74
03:50:01 all 0.92 0.00 0.10 0.08 0.00 98.89
10:50:01 all 1.94 0.00 0.24 0.04 0.00 97.78
16:05:01 all 4.99 0.00 2.39 0.38 0.00 92.24
22:20:01 all 24.26 0.00 1.50 13.51 0.00 60.73
■システムへのリソース割り当てが増えたタイミングを抜き出す。
$ env LANG=C sar -u -f /var/log/sysstat/sa03 | grep ^[0-9] | \
awk '{if ($5>SYS){MSG=$0";"MSG;SYS=$5}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1
00:00:01 CPU %user %nice %system %iowait %steal %idle
00:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
00:20:01 all 0.21 0.00 0.04 0.01 0.00 99.74
03:50:01 all 0.92 0.00 0.10 0.08 0.00 98.89
07:50:01 all 0.48 0.34 0.11 0.02 0.00 99.04
10:50:01 all 1.94 0.00 0.24 0.04 0.00 97.78
11:05:01 all 0.20 0.00 0.40 0.05 0.00 99.34
11:20:01 all 0.30 0.00 0.76 0.03 0.00 98.90
15:05:01 all 0.65 0.00 1.65 0.43 0.00 97.27
16:05:01 all 4.99 0.00 2.39 0.38 0.00 92.24
■I/O WAITが増えたタイミングを抜き出す。
これはユーザへのリソース割り当てが発生したタイミングと一致する。
$ env LANG=C sar -u -f /var/log/sysstat/sa03 | grep ^[0-9] | \
awk '{if ($6>WAIT){MSG=$0";"MSG;WAIT=$6}}END{print MSG}' | sed s/";"/"\n"/g | sort -n -k 1
00:00:01 CPU %user %nice %system %iowait %steal %idle
00:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
00:20:01 all 0.21 0.00 0.04 0.01 0.00 99.74
03:50:01 all 0.92 0.00 0.10 0.08 0.00 98.89
12:05:01 all 0.16 0.00 0.28 0.34 0.00 99.21
15:05:01 all 0.65 0.00 1.65 0.43 0.00 97.27
20:50:01 all 0.28 0.00 0.09 1.23 0.00 98.39
22:20:01 all 24.26 0.00 1.50 13.51 0.00 60.73
■idle値が増えたタイミングを抜き出す。
$ env LANG=C sar -u -f /var/log/sysstat/sa03 | grep ^[0-9] | \
awk '{if ($8>IDLE){MSG=$0";"MSG;IDLE=$8}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1
00:00:01 CPU %user %nice %system %iowait %steal %idle
00:00:01 all 0.00 0.00 0.02 0.00 0.00 99.98
00:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
05:35:01 all 0.02 0.00 0.02 0.00 0.00 99.97
■2/3〜2/10までの一週間の間にユーザの利用率が上がった日と時間とその値。
※20%以上の箇所はclamscanで全ファイルをチェックしたタイミング。
以降は一日以内に変更があったファイルだけ、日単位でチェックしている。
$ for n in `seq -w 3 10`;do env LANG=C sar -u -f "/var/log/sysstat/sa${n}" | \
sed s%^%"2013/02/$n,"%g ;done | \
grep ^[0-9] | grep -v CPU |\
awk '{if($3>TMP){MSG=$0";"MSG;TMP=$3}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1
2013/02/03,00:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
2013/02/03,00:20:01 all 0.21 0.00 0.04 0.01 0.00 99.74
2013/02/03,03:50:01 all 0.92 0.00 0.10 0.08 0.00 98.89
2013/02/03,10:50:01 all 1.94 0.00 0.24 0.04 0.00 97.78
2013/02/03,16:05:01 all 4.99 0.00 2.39 0.38 0.00 92.24
2013/02/03,22:20:01 all 24.26 0.00 1.50 13.51 0.00 60.73
2013/02/04,22:20:01 all 26.10 0.00 1.62 1.38 0.00 70.90
■システムへの負荷も無く、全ファイルをウイルスチェックするような負荷をかけても
ゆとりのあるシステム利用が出来ている事がわかる。
$ for n in `seq -w 3 10`;do env LANG=C sar -u -f "/var/log/sysstat/sa${n}" | \
sed s%^%"2013/02/$n,"%g ;done | \
grep ^[0-9] | grep -v CPU | \
awk '{if($5>TMP){MSG=$0";"MSG;TMP=$5}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1
2013/02/03,00:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
2013/02/03,00:20:01 all 0.21 0.00 0.04 0.01 0.00 99.74
2013/02/03,03:50:01 all 0.92 0.00 0.10 0.08 0.00 98.89
2013/02/03,07:50:01 all 0.48 0.34 0.11 0.02 0.00 99.04
2013/02/03,10:50:01 all 1.94 0.00 0.24 0.04 0.00 97.78
2013/02/03,11:05:01 all 0.20 0.00 0.40 0.05 0.00 99.34
2013/02/03,11:20:01 all 0.30 0.00 0.76 0.03 0.00 98.90
2013/02/03,15:05:01 all 0.65 0.00 1.65 0.43 0.00 97.27
2013/02/03,16:05:01 all 4.99 0.00 2.39 0.38 0.00 92.24
■日単位ならばループの中で整形すればよい。
$ for n in `seq -w 3 10`;do \
env LANG=C sar -u -f "/var/log/sysstat/sa${n}" | \
sed s%^%"2013/02/$n,"%g | \
grep ^[0-9] | grep -v CPU | \
awk '{if($5>TMP){MSG=$0";"MSG;TMP=$5}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1; \
done
2013/02/03,00:05:01 all 0.02 0.00 0.02 0.00 0.00 99.96
2013/02/03,00:20:01 all 0.21 0.00 0.04 0.01 0.00 99.74
2013/02/03,03:50:01 all 0.92 0.00 0.10 0.08 0.00 98.89
2013/02/03,07:50:01 all 0.48 0.34 0.11 0.02 0.00 99.04
2013/02/03,10:50:01 all 1.94 0.00 0.24 0.04 0.00 97.78
2013/02/03,11:05:01 all 0.20 0.00 0.40 0.05 0.00 99.34
2013/02/03,11:20:01 all 0.30 0.00 0.76 0.03 0.00 98.90
2013/02/03,15:05:01 all 0.65 0.00 1.65 0.43 0.00 97.27
2013/02/03,16:05:01 all 4.99 0.00 2.39 0.38 0.00 92.24
2013/02/04,00:05:01 all 0.01 0.00 0.02 0.00 0.00 99.97
2013/02/04,00:20:01 all 0.21 0.00 0.03 0.01 0.00 99.76
2013/02/04,01:50:01 all 0.21 0.00 0.04 0.02 0.00 99.74
2013/02/04,03:50:01 all 0.34 0.00 0.07 0.04 0.00 99.54
2013/02/04,05:35:01 all 1.06 0.00 0.10 0.01 0.00 98.82
2013/02/04,05:50:01 all 0.61 0.00 0.49 0.24 0.00 98.67
2013/02/04,06:05:01 all 0.26 0.00 0.65 0.03 0.00 99.06
2013/02/04,06:20:01 all 0.47 0.00 0.72 0.02 0.00 98.79
2013/02/04,21:05:01 all 0.65 0.00 1.39 0.18 0.00 97.78
2013/02/04,22:20:01 all 26.10 0.00 1.62 1.38 0.00 70.90
2013/02/05,00:05:01 all 0.04 0.00 0.13 0.00 0.00 99.82
2013/02/05,00:20:01 all 0.54 0.00 0.15 0.00 0.00 99.30
2013/02/05,00:35:01 all 0.15 0.00 0.25 0.10 0.00 99.49
2013/02/05,00:50:01 all 1.12 0.00 2.06 0.42 0.00 96.40
2013/02/06,00:05:01 all 0.02 0.00 0.03 0.00 0.00 99.96
2013/02/06,01:50:01 all 0.36 0.00 0.10 0.04 0.00 99.50
2013/02/06,06:20:01 all 0.33 0.00 0.23 0.02 0.00 99.42
2013/02/06,06:50:01 all 0.54 0.00 0.59 0.08 0.00 98.79
2013/02/06,21:50:01 all 2.26 0.00 0.61 0.05 0.00 97.07
2013/02/06,22:05:01 all 0.28 0.00 0.66 0.03 0.00 99.03
2013/02/06,22:20:01 all 19.24 0.00 1.52 0.17 0.00 79.07
2013/02/07,00:05:01 all 0.02 0.00 0.03 0.00 0.00 99.95
2013/02/07,00:20:01 all 0.27 0.00 0.11 0.07 0.00 99.54
2013/02/07,07:50:01 all 0.63 0.30 0.14 0.18 0.00 98.75
2013/02/07,08:35:01 all 1.74 0.00 0.21 0.03 0.00 98.01
2013/02/07,08:50:01 all 0.39 0.00 0.35 0.05 0.00 99.20
2013/02/07,22:05:01 all 0.25 0.00 0.47 0.02 0.00 99.27
2013/02/07,22:20:01 all 25.44 0.00 1.58 0.42 0.00 72.56
2013/02/08,00:05:01 all 0.02 0.00 0.03 0.00 0.00 99.95
2013/02/08,01:50:01 all 0.21 0.00 0.04 0.00 0.00 99.76
2013/02/08,02:50:01 all 0.35 0.00 0.08 0.02 0.00 99.54
2013/02/08,05:35:01 all 0.10 0.00 0.17 0.03 0.00 99.71
2013/02/08,05:50:01 all 0.65 0.00 0.81 0.17 0.00 98.37
2013/02/09,00:05:01 all 0.02 0.00 0.03 0.00 0.00 99.96
2013/02/09,03:20:01 all 0.21 0.00 0.04 0.00 0.00 99.76
2013/02/09,07:50:01 all 0.47 0.31 0.08 0.03 0.00 99.11
2013/02/09,09:50:01 all 0.36 0.00 0.11 0.05 0.00 99.49
2013/02/09,11:35:01 all 1.23 0.00 0.36 0.05 0.00 98.36
2013/02/09,11:50:01 all 0.55 0.00 0.80 0.04 0.00 98.60
2013/02/10,00:05:01 all 0.02 0.00 0.03 0.00 0.00 99.95
2013/02/10,00:20:01 all 0.36 0.00 0.34 0.05 0.00 99.24
2013/02/10,09:20:01 all 0.42 0.00 0.54 0.03 0.00 99.01
2013/02/10,13:50:01 all 2.45 0.00 0.81 0.14 0.00 96.60
2013/02/10,22:20:01 all 23.91 0.00 1.23 7.79 0.00 67.08
■ちなみにユーザリソースのピーク(22:20)の原因は、「clamscandaily.sh」のログが
一日のファイルの変更量が多く、2MBもあった。これはサーバの利用頻度に比例する。
これをCRONがシステムメールで送る際にspamチェックと、clamavのチェックにかけていたため。
「MAILTO=""」を追加して対応。
ログは出しているし、必要なら「OK」を省いたシステムメールを送るスクリプトを別途記述すればよい。
camavのチェックは何をしているのか。
http://d.hatena.ne.jp/labunix/20130122
$ sudo find /var/log/ -type f -print | sudo grep "Feb 3 22\:[12][0-9]\:" `xargs` | \
grep -v "Feb 3 22\:1[0-3]\:\|Feb 3 22\:2[6-9]\:" | \
sed s%`hostname -s`%dummy-host%g | grep "clam\|mail" | \
sort -t\: -k 2.3 -n | sed s/"\,\|\: "/"&\n"/g | grep size | sort -u
size:
size=2128013,
size=2128524,
$ echo "2128013" | awk '{print $1/1024/1024"MB"}'
2.02943MB
■メモリは、「%memused」が日ごとの平均と、
一週間のうち、メモリ使用量が増えたタイミングだけで充分でしょう。。。
$ for n in `seq -w 3 10`;do env LANG=C sar -r -f "/var/log/sysstat/sa${n}" | \
sed s%^%"2013/02/$n,"%g ;done | grep ^[0-9] | grep -v "Linux" | head -2 | tail -1
2013/02/03,00:00:01 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
$ for n in `seq -w 3 10`;do \
env LANG=C sar -r -f "/var/log/sysstat/sa${n}" | grep Average | sed s%^%"2013/02/$n,"%g; \
done
2013/02/03,Average: 470799 1523945 76.40 126202 739091 1255414 31.81
2013/02/04,Average: 174656 1820088 91.24 164063 916880 1251256 31.70
2013/02/05,Average: 133829 1860915 93.29 145373 1031054 1256412 31.84
2013/02/06,Average: 197307 1797437 90.11 174081 934154 1252349 31.73
2013/02/07,Average: 769225 1225519 61.44 169812 421379 1258852 31.90
2013/02/08,Average: 641970 1352774 67.82 201446 444173 1261966 31.98
2013/02/09,Average: 625756 1368988 68.63 218589 445176 1259962 31.92
2013/02/10,Average: 754269 1240475 62.19 183276 390616 1259533 31.91
$ for n in `seq -w 3 10`;do env LANG=C sar -r -f "/var/log/sysstat/sa${n}" | \
sed s%^%"2013/02/$n,"%g ;done | \
grep ^[0-9] | grep -v "kbmem\|Linux" | \
awk '{if($4>TMP){MSG=$0";"MSG;TMP=$4}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1
2013/02/03,00:05:01 789788 1204956 60.41 157648 382688 1251832 31.72
2013/02/03,00:20:01 789580 1205164 60.42 157800 382816 1251832 31.72
2013/02/03,00:50:01 789332 1205412 60.43 158100 382824 1251832 31.72
2013/02/03,01:05:01 789208 1205536 60.44 158220 382824 1251832 31.72
2013/02/03,01:35:01 788836 1205908 60.45 158560 382832 1251832 31.72
2013/02/03,01:50:01 788712 1206032 60.46 158708 382840 1251832 31.72
2013/02/03,02:05:01 788464 1206280 60.47 158936 382844 1251832 31.72
2013/02/03,02:20:01 788216 1206528 60.49 159172 382844 1251832 31.72
2013/02/03,02:50:01 787844 1206900 60.50 159548 382848 1251832 31.72
2013/02/03,03:05:01 787720 1207024 60.51 159692 382852 1251832 31.72
2013/02/03,03:20:01 787472 1207272 60.52 159948 382852 1251832 31.72
2013/02/03,03:35:01 787224 1207520 60.54 160216 382856 1251832 31.72
2013/02/03,03:50:01 786856 1207888 60.55 160524 382872 1251868 31.72
2013/02/03,04:05:01 786608 1208136 60.57 160736 382876 1251868 31.72
2013/02/03,04:20:01 786360 1208384 60.58 160932 382880 1251868 31.72
2013/02/03,04:35:01 786104 1208640 60.59 161156 382884 1251868 31.72
2013/02/03,04:50:01 785988 1208756 60.60 161380 382900 1251868 31.72
2013/02/03,05:05:01 785740 1209004 60.61 161616 382900 1251868 31.72
2013/02/03,05:20:01 785492 1209252 60.62 161852 382904 1251868 31.72
2013/02/03,05:35:01 785244 1209500 60.63 162128 382904 1251868 31.72
2013/02/03,05:50:01 784872 1209872 60.65 162428 382908 1251868 31.72
2013/02/03,06:05:01 784624 1210120 60.67 162716 382912 1251868 31.72
2013/02/03,06:20:01 784252 1210492 60.68 163028 382916 1251868 31.72
2013/02/03,06:35:01 784004 1210740 60.70 163356 382920 1251868 31.72
2013/02/03,06:50:01 783632 1211112 60.72 163652 382920 1251868 31.72
2013/02/03,07:05:01 783384 1211360 60.73 163944 382924 1251868 31.72
2013/02/03,07:20:01 783012 1211732 60.75 164240 382924 1251868 31.72
2013/02/03,07:35:01 781980 1212764 60.80 164568 382932 1253104 31.75
2013/02/03,12:05:01 736712 1258032 63.07 174360 409072 1265600 32.07
2013/02/03,12:20:01 604628 1390116 69.69 176092 535592 1265600 32.07
2013/02/03,12:35:01 480352 1514392 75.92 177920 653996 1266040 32.08
2013/02/03,12:50:01 351368 1643376 82.39 179568 777840 1265436 32.06
2013/02/03,13:20:01 351128 1643616 82.40 180012 777852 1265436 32.06
2013/02/03,15:05:01 17360 1977384 99.13 95052 1192600 1280328 32.44
2013/02/03,16:05:01 16460 1978284 99.17 65772 1290304 1262820 32.00
2013/02/03,16:20:01 16200 1978544 99.19 59748 1290688 1263148 32.01
2013/02/03,17:05:01 15712 1979032 99.21 31764 1327888 1263152 32.01
2013/02/06,23:05:01 14844 1979900 99.26 144496 1169348 1269008 32.15
■ちゃんとスワップしています。
$ env LANG=C sar -B -f "/var/log/sysstat/sa03" | head -3 | tail -1 | sed s%^%"2013/02/03,"%
2013/02/03,00:00:01 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
$ for n in `seq -w 3 10`;do \
env LANG=C sar -B -f "/var/log/sysstat/sa${n}" | grep Average | sed s%^%"2013/02/$n,"%g; \
done
2013/02/03,Average: 16.39 29.13 107.57 0.01 77.70 6.31 0.00 6.25 99.07
2013/02/04,Average: 0.51 10.05 92.61 0.00 62.19 0.50 0.00 0.49 98.45
2013/02/05,Average: 0.71 19.30 108.01 0.01 68.91 1.17 0.00 1.16 99.03
2013/02/06,Average: 17.40 16.14 106.80 0.00 62.31 2.80 0.00 2.79 99.75
2013/02/07,Average: 0.57 11.73 92.56 0.00 63.04 0.00 0.00 0.00 0.00
2013/02/08,Average: 0.02 10.18 88.28 0.00 55.13 0.00 0.00 0.00 0.00
2013/02/09,Average: 0.04 8.45 67.63 0.00 33.73 0.00 0.00 0.00 0.00
2013/02/10,Average: 10.95 10.47 102.76 0.00 66.61 0.08 0.00 0.07 77.28
$ for n in `seq -w 3 10`;do env LANG=C sar -B -f "/var/log/sysstat/sa${n}" | \
sed s%^%"2013/02/$n,"%g ;done | \
grep ^[0-9] | grep -v "pgfree\|Linux" | \
awk '{if($10>TMP){MSG=$0";"MSG;TMP=$10}}END{print MSG}' | \
sed s/";"/"\n"/g | sort -n -k 1
2013/02/03,15:05:01 1.00 747.31 150.41 0.02 366.05 81.61 0.00 77.53 95.00
2013/02/03,15:20:01 5.40 299.39 166.39 0.03 225.70 48.76 0.00 48.67 99.83
2013/02/03,15:50:01 0.12 103.15 118.25 0.00 105.60 20.51 0.00 20.51 100.00
$ sudo find /var/log/ -type f -print | sudo grep "Feb 3 22\:[025][05]:" `xargs` | \
sed s%`hostname -s`%dummy-host%g
/var/log/cron.log.1:Feb 3 22:05:01 dummy-host /USR/SBIN/CRON[2189]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
/var/log/cron.log.1:Feb 3 22:20:01 dummy-host /USR/SBIN/CRON[2251]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
/var/log/cron.log.1:Feb 3 22:50:01 dummy-host /USR/SBIN/CRON[2415]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
/var/log/auth.log.1:Feb 3 22:05:01 dummy-host CRON[2187]: pam_unix(cron:session): session opened for user root by (uid=0)
/var/log/auth.log.1:Feb 3 22:05:01 dummy-host CRON[2187]: pam_unix(cron:session): session closed for user root
/var/log/auth.log.1:Feb 3 22:20:01 dummy-host CRON[2249]: pam_unix(cron:session): session opened for user root by (uid=0)
/var/log/auth.log.1:Feb 3 22:20:01 dummy-host CRON[2249]: pam_unix(cron:session): session closed for user root
/var/log/auth.log.1:Feb 3 22:50:01 dummy-host CRON[2413]: pam_unix(cron:session): session opened for user root by (uid=0)
/var/log/auth.log.1:Feb 3 22:50:01 dummy-host CRON[2413]: pam_unix(cron:session): session closed for user root
$ sudo swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 1951888 5284 -1
■スワップ利用率が1%以上でメモリ使用率が70%以下ならば
メモリ開放とスワップのリセットを行う。
以前に書いたスクリプトが「test」以外がちゃんと動作していなかったので書き直した。
オプションに「test」をつけると、
スワップ利用率が0%以上でメモリ使用率が100%()以下ならば
メモリ開放とスワップのリセットを行う。(つまり強制する)
※小数点以下切捨て
$ sudo ./autoclear.sh test
[Before]
2013/02/11,22:32:16,MEMUSED=59%,SWAPUSED=0%
total used free shared buffers cached
Mem: 1994744 1183648 811096 0 109716 393908
-/+ buffers/cache: 680024 1314720
Swap: 1951888 0 1951888
vm.drop_caches = 3
[After]
2013/02/11,22:32:16,MEMUSED=27%,SWAPUSED=0%
total used free shared buffers cached
Mem: 1994744 543732 1451012 0 780 24312
-/+ buffers/cache: 518640 1476104
Swap: 1951888 0 1951888
$ w3m -dump https://raw.github.com/labunix/sa_report/master/autoclear.sh
set -e
if [ "`id -u`" -ne "0" ];then
echo "Sorry,NotPermit User"
exit 1
fi
if [ "x${PATH}" == "x" ];then
echo "PATH Error, PATH=$PATH"
exit 2
fi
echo "$PATH" | sed s/"\:"/"\n"/g | \
grep '^/usr/sbin' > /dev/null 2>&1 || \
export PATH=/usr/sbin:$PATH
echo "$PATH" | sed s/"\:"/"\n"/g | \
grep '^/sbin' > /dev/null 2>&1 || \
export PATH=/sbin:$PATH
cd $(dirname $0)
case $1 in
-t|test)
SWAPLIMIT=0
MEMLIMIT=100
;;
*)
SWAPLIMIT=1
MEMLIMIT=70
echo "# Usage $0 [-t|test]"
echo "# Default:"
echo "# SWAPUSED>0 && MEMUSED<70; -> clear cache and reset swap."
echo "# -t|test"
echo "# force clear, cache and reset swap"
echo ""
;;
esac
MYDATE=`env LANG=C date '+%Y/%m/%d,%H:%M:%S'`
SWAPUSED=`free | grep ^Swap | awk '{printf "%d\n",($3/$2*100)}'`
MEMUSED=`free | grep ^Mem | awk '{printf "%d\n",($3/$2*100)}'`
function kernel_mem_clear() {
echo "[Before]"
echo "$MYDATE,MEMUSED=${MEMUSED}%,SWAPUSED=${SWAPUSED}%"
free
sync;sync;sync
sleep 1 && sysctl -w vm.drop_caches=3
sync;sync;sync
sleep 1 && swapoff -a && swapon -a
echo "[After]"
SWAPUSED=`free | grep ^Swap | awk '{printf "%d\n",$3/$2*100}'`
MEMUSED=`free | grep ^Mem | awk '{printf "%d\n",$3/$2*100}'`
echo "$MYDATE,MEMUSED=${MEMUSED}%,SWAPUSED=${SWAPUSED}%"
free
}
if [ "$SWAPUSED" -ge "$SWAPLIMIT" ];then
if [ "$MEMUSED" -le "$MEMLIMIT" ];then
kernel_mem_clear
fi
else
echo "$MYDATE,MEMUSED=${MEMUSED}%,SWAPUSED=${SWAPUSED}%"
fi
unset SWAPUSED MEMUSED SWAPLIMIT MEMLIMIT MYDATE PATH
exit 0