topコマンドで表示されるVIRT、RESおよびSWAPの意味について

このQ&Aのポイント
  • topコマンドで表示されるVIRT、RES、SWAPの意味とは?
  • CentOS5.4上で動作するアプリケーションの使用メモリについて調査中
  • topコマンドの出力結果を見てもVIRTとRESの数値に差異があり、SWAPも大きな値が表示される
回答を見る
  • ベストアンサー

topコマンドで表示されるVIRT、RESおよびSWAPの意味について

topコマンドで表示されるVIRT、RESおよびSWAPの意味について教えてください。 CentOS5.4上で動作しているアプリケーションの使用メモリについて調査しています。 サーバのメモリ容量は512MBで、この上でスワップアウトしないようにアプリケーションの起動数(常駐)を調整しようとしています。 topコマンドでプロセスが使用している物理メモリ容量はRES項目を見れば良いことがわかっていますが、VIRT(仮想メモリの総量)とSWAP(スワップされたサイズ)が具体的に何を示しているのかがわからず、困っています。 topコマンドの出力結果は下の通りです。 この検証用サーバでは暫定的にパーティション設定でスワップ領域を作成していません。 しかしtopコマンドではVIRTとRESの数値は差異があり、SWAP項目も大きな値を示しているプロセスがあります。 スワップ領域が無いのではtopコマンドはVIRTとRESが同じになり、SWAPはゼロとなると予想していたのですがどうしてならないのですか? top - 03:35:44 up 36 min, 3 users, load average: 0.13, 0.17, 0.20 Tasks: 90 total,  1 running, 89 sleeping,  0 stopped,  0 zombie Cpu(s): 0.0%us, 1.3%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.7%si, 0.0%st Mem:  515340k total,  452152k used,  63188k free,  18132k buffers Swap:    0k total,    0k used,    0k free,  347404k cached  PID USER    PR NI VIRT RES SHR S %CPU %MEM  TIME+ SWAP COMMAND  4602 tomcat  25  0 645m 28m 6996 S 0.0 5.8  0:04.12 616m java  2227 root   34  19 25656 10m 2108 S 0.0 2.0  0:00.12 14m yum-updatesd  1680 root   17  0 11580 9964 240 S 0.0 1.9  0:00.02 1616 restorecond  1936 haldaemo 18  0 5472 3676 1688 S 0.0 0.7  0:01.20 1796 hald  2499 root   18  0 10540 2916 1504 S 0.0 0.6  0:00.03 7624 httpd  3672 root   15  0 10064 2888 2308 S 0.7 0.6  0:02.50 7176 sshd  3927 root   20  0 9916 2880 2308 S 0.0 0.6  0:00.34 7036 sshd  2054 root   18  0 10116 2328 1696 S 0.0 0.5  0:00.04 7788 cupsd  2500 apache  25  0 10540 2088 640 S 0.0 0.4  0:00.00 8452 httpd どうしてもズレるので画像を添付してます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

答えにたどり着く前に、若干長めの説明が必要です。 > topコマンドで表示されるVIRT、RESおよびSWAPの意味について教えてください。  RESは、ご認識の通り、そのプロセスの物理メモリ使用量です。  VIRTとして表示されている仮想メモリ総量とは、そのプロセスの 仮想アドレス空間の中で、有効となっているページの総量です。 これに計上されるのは、参考リンクの「仮想記憶の概念図」でカラフルに 描かれている「物理メモリ」や「スワップ」に対応するページのほか、 以下のようなものも含まれます。 ・プロセスが確保したメモリのうち、まだ一回もアクセスして  いない部分。   ⇒アクセスしたときに初めて物理メモリが割り当てられ、    RESにも計上されていきます。   (javaのRESに比べてかなり大きいVIRTは、これによるものと    思われます。大きなヒープサイズを指定していませんか?) ・プロセスが ファイルを仮想メモリ空間にmmap(2) したが、  まだ一回もアクセスしていない部分。   ⇒Linux(UNIX) には、あたかもメモリをアクセスするかのように    ファイルを読み書きできる mmap(2) という機能があり、    かなり多用されています。mmap直後のファイルは、    VIRTには計上されますが、物理メモリには読み込まれずRESには計上    されません。ファイルをmmapした仮想メモリ空間にアクセスした    部分が、物理メモリに読み込まれRESに計上されます。 > スワップ領域が無いのではtopコマンドはVIRTとRESが同じになり、 > SWAPはゼロとなると予想していたのですがどうしてならないのですか? 実は、SWAPとして表示される数値は、単に VIRT と RES の差です。 VERT(仮想メモリ総量)の中には、物理メモリ(RES)やスワップ領域の 使用量だけなく上記で挙げたような仮想空間の部分の合計が含まれ ますから、スワップ領域がゼロでも、上記で挙げたような空間が SWAP として表れているのです。 個人的にはこの数値をSWAPと呼ぶのは、かなり不適切だと思いますが、 多くのLinuxディストリビューションのtopコマンドで表示される SWAP欄は、そういう計算をしているということです。

参考URL:
http://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6
yukinori_111
質問者

お礼

とても具体的な説明でよく分かりました。 プログラム上でメモリ確保を行っても、その領域が使用されるまでは実際には確保されていないという最適化のようなもののためにVIRTとRESに差が出るようなことになっているんですね。 起動するアプリケーションの数は、アプリを起動していろいろと操作してみてからRESの値を参考に決めようと思います。 SWAP値は名前どおりのスワップアウトした値でないのは混乱させられますね、注意します。 ありがとうございました。

関連するQ&A

  • topコマンドの表示内容について教えてください

    topコマンドの表示内容に詳しい方、教えてください。 topコマンドを実行すると以下のように表示されました。 top - 16:24:13 up 2:23, 1 user, load average: 0.02, 0.01, 0.00 Tasks: 58 total, 1 running, 57 sleeping, 0 stopped, 0 zombie Cpu(s): 3.3% us, 2.0% sy, 0.0% ni, 94.7% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 3114724k total, 770612k used, 2344112k free, 18352k buffers Swap: 2096472k total, 0k used, 2096472k free, 87468k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2976 root 18 0 748m 613m 3188 S 10 20.2 6:53.72 aaaaa 1 root 16 0 1724 552 472 S 0 0.0 0:00.70 init 上記aaaaaプロセスの%CPUの数値なのですが、10%となっています。 しかし、idleが94.7%あるようなのです。 この10%と言う値は、何に対する10%なのでしょうか? すいませんが分かる方、よろしくお願いします。

  • サーバ状況の見方と対策方法をどうすべきか?

    CentOS 4を導入してMySQLのインデックスを作っていますが、 サーバが動かなくなってしまい、どうしたらいいか困っています。 メモリを足すだけでよいのか? CPUを上げた方がよいのか? ハードディスクを取り替えた方がよいのか? どう見て、どう動けばよいのでしょうか? よろしくお願いします。 # vmstat 1 10 procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 2 241628 872 1144 487020 19 8 1852 1270 5 1 12 2 45 41 0 1 241628 1616 1140 486428 0 0 3680 7084 1223 249 4 2 0 94 0 2 241628 2144 1140 485868 0 0 588 0 1153 315 6 0 0 94 0 1 241628 1936 1140 486120 0 0 556 0 1145 291 6 1 0 93 0 2 241628 1512 1108 486584 0 0 1192 0 1177 149 5 1 0 94 1 0 241628 2580 1084 485492 0 0 1332 2684 1205 247 3 4 0 93 0 2 241628 1656 1076 486400 0 0 1564 0 1191 153 4 1 0 95 0 2 241628 1128 1076 486920 0 0 1828 24 1214 95 0 1 0 99 0 2 241628 1256 1056 486856 0 0 1048 0 1176 176 3 1 0 96 0 2 241628 808 1052 487304 0 0 3764 0 1206 252 4 1 0 95 # top top - 11:52:27 up 9 days, 3:07, 1 user, load average: 1.83, 1.69, 1.66 Tasks: 49 total, 2 running, 47 sleeping, 0 stopped, 0 zombie Cpu(s): 0.7% us, 0.3% sy, 0.0% ni, 0.0% id, 98.0% wa, 1.0% hi, 0.0% si Mem: 507484k total, 506012k used, 1472k free, 1456k buffers Swap: 1052248k total, 241644k used, 810604k free, 485980k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 21899 mysql 15 0 1257m 332m 332m S 1.3 67.2 243:22.41 mysqld 1 root 16 0 3252 88 68 S 0.0 0.0 0:01.17 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.13 ksoftirqd/0 3 root 5 -10 0 0 0 S 0.0 0.0 0:00.04 events/0 4 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 khelper 5 root 15 -10 0 0 0 S 0.0 0.0 0:00.00 kacpid 20 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kblockd/0 41 root 13 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0 21 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khubd 40 root 15 0 0 0 0 S 0.0 0.0 12:31.75 kswapd0 188 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kseriod 296 root 15 0 0 0 0 D 0.0 0.0 2:40.01 kjournald # free total used free shared buffers cached Mem: 507484 505440 2044 0 1372 485748 -/+ buffers/cache: 18320 489164 Swap: 1052248 241640 810608

  • 【メモリ]】vmstat、free、topの表示

    Linux(CentOS)でサーバのメモリ状態を確認するために 以下のコマンドを実行しました。 ・vmstat ・free ・top 【vmstat】 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 140 29812 137284 242088 0 0 0 3 2 0 1 0 96 3 0 【free】 total used free shared buffers cached Mem: 515312 485500 29812 0 137284 242088 -/+ buffers/cache: 106128 409184 Swap: 1052216 140 1052076 【top】 Mem: 515312k total, 485500k used, 29812k free, 137284k buffers Swap: 1052216k total, 140k used, 1052076k free, 242088k cached 各コマンドの表示結果の関連性を教えてください。 1.vmstatコマンドでは「used」項目が表示されないため  メモリの使用量が分からない? 2.「used」項目と「free」項目を足し合わせると、実メモリサイズ(total)と一致する。  「buff(ers)」項目と「cashe(d)」項目は、実メモリの情報?仮想メモリの情報? 3.「buff(ers)」項目と「cashe(d)」とは?また違いは?  #freeコマンドでは、「cashed」項目は「Mem(実メモリ)」列に表示されているが  #topコマンドでは、「Swap(仮想メモリ)」列に表示されている。 4.「-/+ buffers/cache:」列の意味は?  「used」項目と「free」項目を足し合わせると、実メモリサイズ(total)と一致する。  #「Mem」項目の「buffers」項目と「cashed」との違いは? ご教示お願いいたします。 <環境> CentOS(5.5) カーネルバージョン:2.6.18-194.11.3.el5 実メモリ:512MB スワップ領域:1024MB procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 140 29812 137260 242080 0 0 0 3 2 0 1 0 96 3 0 top - 17:00:00 up 125 days, 16:04, 1 user, load average: 0.05, 0.05, 0.02 Tasks: 107 total, 1 running, 106 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.2%sy, 0.4%ni, 96.2%id, 3.1%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 515312k total, 485500k used, 29812k free, 137260k buffers Swap: 1052216k total, 140k used, 1052076k free, 242080k cached

  • swapの作成でわからないところがあります。

    こんにちは。 LPICの勉強をはじめたのですが、 swapを作る練習をしていてわからないところが出てきました。 hda3という512Mのスワップ領域を作ったつもりなのですが スワップを有効にするとfree -mでswapが40507と激増している 気がして不思議に思っています。 よければ教えてください。 [root@localhost ~]# free -m total used free shared buffers cached Mem: 249 229 20 0 7 88 -/+ buffers/cache: 133 116 Swap: 509 0 509 [root@localhost ~]# fdisk -l Disk /dev/hda: 120.0 GB, 120034123776 bytes 255 heads, 63 sectors/track, 14593 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/hda1 1 2550 20482843+ 83 Linux /dev/hda2 2551 2615 522112+ 82 Linux スワップ /dev/hda3 2616 2678 506047+ 82 Linux スワップ Disk /dev/hdb: 40.0 GB, 40020664320 bytes 16 heads, 63 sectors/track, 77545 cylinders Units = シリンダ数 of 1008 * 512 = 516096 bytes デバイス Boot Start End Blocks Id System [root@localhost ~]# swapon /dev/hda3 [root@localhost ~]# free -m total used free shared buffers cached Mem: 249 248 1 0 7 88 -/+ buffers/cache: 152 97 Swap: 40507 0 40507 [root@localhost ~]#

  • Solaris10のswap領域の見方について

    Solaris10のswap領域の見方について、教えていただきたいと思います。 df -hコマンドを使用してみると、 ファイルシステム サイズ 使用済み 使用可能 容量 マウント先 /dev/dsk/c0d0s0 5.5G 5.2G 263M 96% / /devices 0K 0K 0K 0% /devices ctfs 0K 0K 0K 0% /system/contract proc 0K 0K 0K 0% /proc mnttab 0K 0K 0K 0% /etc/mnttab swap 2.5G 920K 2.5G 1% /etc/svc/volatile objfs 0K 0K 0K 0% /system/object /usr/lib/libc/libc_hwcap1.so.1 5.5G 5.2G 263M 96% /lib/libc.so.1 fd 0K 0K 0K 0% /dev/fd swap 2.5G 1.1M 2.5G 1% /tmp swap 2.5G 28K 2.5G 1% /var/run /dev/dsk/c0d0s7 33G 4.7G 28G 15% /export/home という形でswap領域が表示されますが、 swap -l で計算すると swap ファイル デバイス swaplo ブロック 空き容量 /dev/dsk/c0d0s1 102,1 8 1076344 1076344 と表示され、1ブロック512バイトなので、551088128byte = 551M となり 上のdf の結果と異なります。 topコマンドを使用すると total swap, 526M free swap と出て、どうやら、SWAP領域は500Mちょっと、という認識が正しいのかとおもわれますが、とするとdfの結果の2.5Gは何を指しているのでしょうか?

  • centosについて

    centos6.7でサーバーを構築しています。 topコマンドを実施すると、よくわからない文字列のプロセスが表示されます。 以下の例では「hkoucuq」「ytrhfllfla」など上のほうのプロセスです。 ------------------------------------------- Tasks: 127 total, 1 running, 126 sleeping, 0 stopped, 0 zombie Cpu0 : 0.7%us, 4.7%sy, 0.0%ni, 94.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 1.0%us, 3.3%sy, 0.0%ni, 94.7%id, 1.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 3811232k total, 319640k used, 3491592k free, 92968k buffers Swap: 3948540k total, 0k used, 3948540k free, 64888k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1603 root 20 0 22852 972 212 S 1.0 0.0 0:13.27 hkoucuq 1611 root 20 0 31516 276 180 S 0.7 0.0 0:05.61 ytrhfllfla 18795 root 20 0 15032 1248 928 R 0.7 0.0 0:00.49 top 19308 root 20 0 1344 884 160 S 0.7 0.0 0:00.02 ouiwls 19311 root 20 0 1344 888 160 S 0.3 0.0 0:00.01 ucvskvjbj 19314 root 20 0 1344 884 160 S 0.3 0.0 0:00.01 twhfutrkr 19317 root 20 0 1344 884 160 S 0.3 0.0 0:00.01 rwltkgdj 19320 root 20 0 1344 888 160 S 0.3 0.0 0:00.01 wfoaai 1 root 20 0 19356 1532 1228 S 0.0 0.0 0:02.76 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.07 migration/0 ------------------------------------------- 「ytrhfllfla」で検索してみると以下の結果がでます。 ------------------------------------------- /etc/rc.d/init.d/ytrhfllfla /usr/bin/ytrhfllfla ------------------------------------------- ちなみに「/etc/rc.d/init.d/ytrhfllfla」の内容は以下のようなものです。 ------------------------------------------- #!/bin/sh # chkconfig: 12345 90 90 # description: ytrhfllfla ### BEGIN INIT INFO # Provides: ytrhfllfla # Required-Start: # Required-Stop: # Default-Start: 1 2 3 4 5 # Default-Stop: # Short-Description: ytrhfllfla ### END INIT INFO case $1 in start) /usr/bin/ytrhfllfla ;; stop) ;; *) /usr/bin/ytrhfllfla ;; esac ------------------------------------------- 再起動したり、プロセスを終了させても、今度は違う文字列のプロセスが出現します。 これが何なのか、不要であれば削除できないのか教えていただけないでしょうか。 よろしくお願い致します。

  • topコマンドで得られる結果の表示について

    使用しているのはRHEL3です。 topコマンドで得られるkswapdのTIME値についてなんですが、 通常は以下のように表示されるのではないかと思います 7 root 15 0 0 0 0 SW 0.0 0.0 0:00 1 kswapd ところがこの中でTIME値の部分(上では0:00の部分)の値がおかしいんです。 具体的には以下のように表示されています 7 root 15 0 0 0 0 SW 0.0 0.0 1934M 1 kswapd この表示は正しいのでしょうか。また正しいとすれば、この1934Mとは何を意味しているのでしょうか? よろしくお願いいたします。

  • top commandの正規表現

     標記について、例えば、topコマンドを実行後、 11:00am up 1 day, 8:23, 1 user, load average: 0.11, 0.03, 0.01 54 processes: 53 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 0.9% user, 1.7% system, 0.0% nice, 97.2% idle Mem: 62972K av, 61388K used, 1584K free, 8948K shrd, 1332K buff Swap: 266072K av, 3564K used, 262508K free 50120K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 3319 number 15 0 1020 1020 836 R 0 1.3 1.6 0:00 top 415 root 11 0 364 344 272 S 0 0.5 0.5 0:00 crond 1357 number 7 0 2408 2392 2020 S 0 0.1 3.7 4:38 smbd (続く) と表示されますが、このうちCOMMAND部分である「top」や「crond」のみを取り出す正規表現をご教示願います。  なお、使用している言語はAndroid/Javaです。

  • Linux での swap の容量について

    昔から UNIX では swap の容量はメモリの2倍や3倍がよいと言われていたようですが、 Linux ではそんなことはなく、メモリが多ければ swap なしでも問題なく動くとつい先ほどまで信じていたんですが、「Linux教科書 LIPCレベル1 (ISBN4-7981-0292-X)」という本を買って、swap に関する説明を見たら「スワップ領域は塔載メモリと同程度を確保します。」と書いてありました。 これは一体どういうことでしょうか? 本当に Linux は swap の容量を塔載メモリと同じ程度にしなければいけないんですか? だとするとその根拠はなんでしょうか? p.s. 根拠がなくても資格試験でそういう問題が出て塔載メモリと同じ程度と答えないと点がもらえないというのならそう答えますが、非常に気になります。

  • LinuxのTopコマンドで表示されるメモリーについて

    Linuxでtopコマンドを入力したところ、次のような結果が返されました。 結果を見ると、メモリーの空きが69.5Mとなっているのですが、systemで使用しているCPUは0.3%しかなく、プロセスもほとんどがsleepでメモリーを消費する要素が見当たりません。 どこでメモリーを使用しているのか詳細を調べる方法を教えて下さい。 よろしくお願いします。 ■結果 ================================================== 20 processes: 19 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 0.0% user, 0.3% system, 0.0% nice, 99.5% idle Mem: 517344K av, 446152K used, 71192K free, 7972K shrd, 323856K buff Swap: 273024K av, 68K used, 272956K free 82572K cached