「サンプルプログラム集」の版間の差分
提供: Wikinote
(新しいページ: '== C == == Python == === calc_buddy.py === /proc/buddyinfo のそれぞれのゾーンの合計サイズを計算するスクリプト。 タイムスタンプを付けて...') |
(→Python) |
||
| 行2: | 行2: | ||
== Python == | == Python == | ||
| + | |||
| + | === memcurses.py === | ||
| + | |||
| + | curses (libcurses) を利用した /proc/meminfo の変化量を表示するスクリプト。 | ||
| + | |||
| + | ソースコード <toggledisplay> | ||
| + | #!/usr/bin/env python | ||
| + | import sys, time, curses | ||
| + | |||
| + | def main(argv): | ||
| + | win = curses.initscr() | ||
| + | if len(argv) > 1: | ||
| + | interval = int(argv[1]) | ||
| + | else: | ||
| + | interval = 1 | ||
| + | |||
| + | f = open("/proc/meminfo", "r") | ||
| + | prev = [] | ||
| + | while True: | ||
| + | win.clear() | ||
| + | win.addstr(0, 0, "Every %d.0s : %s" % (interval, time.ctime())) | ||
| + | i = 0 | ||
| + | try: | ||
| + | for line in f: | ||
| + | win.addstr(i+2, 0, line[:-1]) | ||
| + | cur = line.split()[1] | ||
| + | try: | ||
| + | if cur != prev[i]: | ||
| + | win.addstr(" %+d" % (int(cur) - int(prev[i]))) | ||
| + | prev[i] = cur | ||
| + | except IndexError: | ||
| + | prev.append(cur) | ||
| + | i += 1 | ||
| + | win.addstr("\n") | ||
| + | win.refresh() | ||
| + | f.seek(0) | ||
| + | time.sleep(interval) | ||
| + | except KeyboardInterrupt: | ||
| + | break | ||
| + | |||
| + | curses.endwin() | ||
| + | f.close() | ||
| + | return 0 | ||
| + | |||
| + | if __name__ == "__main__": | ||
| + | sys.exit(main(sys.argv)) | ||
| + | </toggledisplay> | ||
| + | |||
| + | 実行例 <toggledisplay> | ||
| + | $ ./memcurses.py 5 | ||
| + | Every 5.0s : Sat Feb 26 01:06:31 2011 | ||
| + | |||
| + | MemTotal: 5968984 kB | ||
| + | MemFree: 458472 kB | ||
| + | Buffers: 292224 kB +8 | ||
| + | Cached: 4135716 kB | ||
| + | SwapCached: 0 kB | ||
| + | Active: 2248520 kB +44 | ||
| + | Inactive: 2798728 kB | ||
| + | HighTotal: 5241152 kB | ||
| + | HighFree: 449732 kB | ||
| + | LowTotal: 727832 kB | ||
| + | LowFree: 8740 kB | ||
| + | SwapTotal: 6144852 kB | ||
| + | SwapFree: 6144716 kB | ||
| + | Dirty: 456 kB | ||
| + | Writeback: 0 kB | ||
| + | AnonPages: 619336 kB +32 | ||
| + | Mapped: 1179140 kB +112 | ||
| + | Slab: 111936 kB -44 | ||
| + | PageTables: 12296 kB +52 | ||
| + | NFS_Unstable: 0 kB | ||
| + | Bounce: 0 kB | ||
| + | CommitLimit: 9129344 kB | ||
| + | Committed_AS: 1629408 kB | ||
| + | VmallocTotal: 116728 kB | ||
| + | VmallocUsed: 19364 kB | ||
| + | VmallocChunk: 97136 kB | ||
| + | HugePages_Total: 0 | ||
| + | HugePages_Free: 0 | ||
| + | HugePages_Rsvd: 0 | ||
| + | Hugepagesize: 2048 kB | ||
| + | </toggledisplay> | ||
=== calc_buddy.py === | === calc_buddy.py === | ||
| 行7: | 行90: | ||
/proc/buddyinfo のそれぞれのゾーンの合計サイズを計算するスクリプト。 | /proc/buddyinfo のそれぞれのゾーンの合計サイズを計算するスクリプト。 | ||
タイムスタンプを付けて記録したファイルにも対応。 | タイムスタンプを付けて記録したファイルにも対応。 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
ソースコード <toggledisplay> | ソースコード <toggledisplay> | ||
| 行37: | 行115: | ||
file.close() | file.close() | ||
</toggledisplay> | </toggledisplay> | ||
| + | |||
| + | 実行例 <toggledisplay> | ||
| + | $ ./calc_buddy.py | ||
| + | Node 0, zone DMA 46 5 3 0 0 0 0 1 1 1 0 3856 KB | ||
| + | Node 0, zone Normal 327 2 1 1 1 1 1 0 0 0 1 5916 KB | ||
| + | Node 0, zone HighMem 78051 15607 279 2 59 17 2 0 0 0 0 448052 KB | ||
| + | </toggledisplay> | ||
2011年2月26日 (土) 01:11時点における版
C
Python
memcurses.py
curses (libcurses) を利用した /proc/meminfo の変化量を表示するスクリプト。
ソースコード <toggledisplay>
#!/usr/bin/env python
import sys, time, curses
def main(argv):
win = curses.initscr()
if len(argv) > 1:
interval = int(argv[1])
else:
interval = 1
f = open("/proc/meminfo", "r")
prev = []
while True:
win.clear()
win.addstr(0, 0, "Every %d.0s : %s" % (interval, time.ctime()))
i = 0
try:
for line in f:
win.addstr(i+2, 0, line[:-1])
cur = line.split()[1]
try:
if cur != prev[i]:
win.addstr(" %+d" % (int(cur) - int(prev[i])))
prev[i] = cur
except IndexError:
prev.append(cur)
i += 1
win.addstr("\n")
win.refresh()
f.seek(0)
time.sleep(interval)
except KeyboardInterrupt:
break
curses.endwin()
f.close()
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))
</toggledisplay>
実行例 <toggledisplay>
$ ./memcurses.py 5 Every 5.0s : Sat Feb 26 01:06:31 2011 MemTotal: 5968984 kB MemFree: 458472 kB Buffers: 292224 kB +8 Cached: 4135716 kB SwapCached: 0 kB Active: 2248520 kB +44 Inactive: 2798728 kB HighTotal: 5241152 kB HighFree: 449732 kB LowTotal: 727832 kB LowFree: 8740 kB SwapTotal: 6144852 kB SwapFree: 6144716 kB Dirty: 456 kB Writeback: 0 kB AnonPages: 619336 kB +32 Mapped: 1179140 kB +112 Slab: 111936 kB -44 PageTables: 12296 kB +52 NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 9129344 kB Committed_AS: 1629408 kB VmallocTotal: 116728 kB VmallocUsed: 19364 kB VmallocChunk: 97136 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 Hugepagesize: 2048 kB
</toggledisplay>
calc_buddy.py
/proc/buddyinfo のそれぞれのゾーンの合計サイズを計算するスクリプト。 タイムスタンプを付けて記録したファイルにも対応。
ソースコード <toggledisplay>
#!/usr/bin/env python
import sys
if len(sys.argv) == 1:
files = [ open('/proc/buddyinfo', 'r') ]
ts_shift = 4;
else:
files = [ open(f) for f in sys.argv[1:] ]
ts_shift = 6;
for file in files:
for line in file:
if len(line) > 1:
print line[:-1],
fields = line.split()
total = 0
for val in range(0,11):
total += int(fields[ts_shift + val]) * 4 * 2**val
print total, "KB"
else:
print line,
file.close()
</toggledisplay>
実行例 <toggledisplay>
$ ./calc_buddy.py Node 0, zone DMA 46 5 3 0 0 0 0 1 1 1 0 3856 KB Node 0, zone Normal 327 2 1 1 1 1 1 0 0 0 1 5916 KB Node 0, zone HighMem 78051 15607 279 2 59 17 2 0 0 0 0 448052 KB
</toggledisplay>