「サンプルプログラム集」の版間の差分
提供: 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>