【先着1,000名様!】1,000円分をプレゼント!

SYNFlood攻撃を回避する方法を教えてください!

ネットワーク初心者です。

会社で運用しているサーバが先日アクセス不可になりました。
FWのログが得られなかったため、詳細は分からないのですが、おそらくSYNFlood
だったのでは?との結論に至っており、今後の対策を進めているところです。

その中で、(1)上記の結論が正しいのか、(2)打てる対策は他にないのか、について
何かアドバイスをいただければと思い、質問させていただきます。


サーバ構成としては、下記のようになっております。
FW ⇒ LB ⇒ WEB
事故以降に調査した結果、LB側でセッションがたまった状況になったためではと考
えています。(★)
根拠としては、(1)FW側のSYNFloodProtectionのThresholdの設定が200ppsだ
ったので、当時は大量にSYNパケットがLBに送られていた、(2)最大同時セッション
数についても、FW側が128でLB側が100となっており、LB自体がセッションを受け
入れられない状況だった、(3)FWのタイムアウト値が5分なのに対し、LBの無応答
タイムアウト値が61分となっていた、ことなどからです。

そこで、対策として下記の対応をしてます。
(1)FW側のSYNFloodProtectionのThresholdの設定を1ppsに変更
(2)同時セッション数についてもFWは256、LBを384に変更

しかしながら、(1)の設定でも1パケット/秒がLBに送られる事になりますので、
LBの無応答タイムアウト値をFWに合わせて変更できないと、無用なセッションが
滞留することには変わりがありません。

メーカーに確認すると、LBのタイムアウト値は61分固定で変更不可とのことで、
数値の根拠はブラウザ(IE5,6)のタイムアウトが60分だったから(IE7,8では
30秒になっていますが…)だそうです。

FWがタイムアウトになった際にRSTをLBに送信してくれれば問題ないのですが、
それも仕様上不可とのこと。

現状では、SYNパケットは1/sはLB側に送られる状況であり、万一攻撃を受けた
際は、そのセッションが滞留する事になります。LBのタイムアウト値61分から
算出すると、LBの同時接続数を3660に設定しておかないと、SYNFloodに対抗
できない事となり、その設定をしたとしても実際のところLBのサーバの性能上
受け切れるのか、また、WEBサーバ自身もさばき切れるのか、など現実味のあ
る対応とは思えません。

そこで、セッション監視スクリプトでも作ってLB側に設置し、最大同時接続数
に達した場合は、LBを強制再起動させるしかないのでは、と考えています。(★)

そこで質問なのが、上記★を付けた部分が正しいかどうか、という点です。

また、FW側がRSTを送信してくれないのは、一般的なFWの仕様なのか、たまた
ま利用しているFW(外部サービスです)の仕様の問題なのでしょうか?

何かご存じのことがあればご教授いただけると助かります。

どうぞよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

 追加補足(3)拝見しました。

解釈されている通りかと存じます。Unixサーバでのiptables記述でのTCPアクセス制限ですね。L3スイッチやL2スイッチ、ルーターでのQOS、VLAN等での帯域制限はレスポンスの低下効果がありますので、総合的な判断をしますと何とも言えませんが、レスポンスと可用性等も考えると、専用セキュリティ・ゲートウェイでの運用ですね。
    • good
    • 2
この回答へのお礼

お礼が遅くなりました(^^ゞ
ご丁寧に何度も説明いただき、ありがとうございました。
大変勉強にもなりました!!
また質問することもあるかと思いますが、その折はまたよろしくお願いします。

お礼日時:2010/10/26 20:22

 追加補足(2)拝見しました。

SYNFlood攻撃については、Apacheのサービス・インスタンスでのタイムアウト記述だけではなく、TCPレベルでの制限が必要になるのが私の解釈です。
 Unixサーバでしたら、サーバ側でも「net.ipv4.tcp_tw_recycle=1」、「net.ipv4.tcp_fin_timeout=**」での数値制限やiptables で SYN,RST,ACK SYN を時間/回数で制限する等でしょうか。
 SYNFlood攻撃だけではなく、付帯して攻撃手段になり得るのが、長時間に渡るオープン状態のコネクションを大量に発生させるConnection Flood攻撃や偽装したUDPパケットを大量に送りつけるUDPFlood攻撃も御座いますので、より上位のポイントからのトラフィック制御が必要となるのが、現状での通説ですね。
 

この回答への補足

丁寧に回答いただき、本当にありがとうございます♪

WebサーバはLinuxですが、サーバ側でtcpレベルの設定をしてやれば、
LBの問題を少しカバーできるという解釈で正しいでしょうか?

いずれにせよ、本格的な攻撃を受けたらおそらくはサービス自身は
どうしようもないと理解しているつもりです。
その点については、サーバがハングしてノットあれないような対策を
しておくことと、速やかに攻撃を把握して必要があればサーバを落と
す(?)などの対応の体制が必要なのかと考えています。

「上位のポイントからのトラフィック制御が必要となる」というのは
現状のFW-LB-Webの構成でいえば、FWの位置での制御が必要という
理解で正しいですよね?

初歩的な質問ばかりの繰り返しで申し訳ありませんが、もう少し
お付き合いいただけると助かります。

補足日時:2010/10/23 23:59
    • good
    • 0

 追加補足拝見しました。

SYNFlood攻撃に対する帯域制限については解釈している内容で合っているかと存じます。L3スイッチやL2スイッチの中にQOS機能での帯域制限を細かく設定できるタイプが御座います。
 それと、ファイアーウォール関連機器又は一般的なルーターは、不正パケットに対するコネクション・リセット機能は付いておりません。業務用セキュリティ・ゲートウェイや業務用ルーターの中にそういった機能が含まれているのみとなります。実際に業務用ルーターを利用で、ファイアーウォール機能に不足を感じているのであれば、既存ルーターの攻撃に対するQOSやVLAN設定にて帯域制限を設けていく形となります。

この回答への補足

丁寧に説明いただき、感謝感謝です!!
ありがとうございます!!!

結局、外部サービスを利用しているFWの種類を変えるかUTMにするか
しかない感じですね(^_^;)

ふと思いついたのですが、LB(ロードバランサ)の後ろにWebサーバ
がいるわけですが、Webサーバ側でもタイムアウト値の設定があるの
では???(まだ調べてません)と思いました。
ブラウザ(IE)のタイムアウト値は60分だそうですが、通常それほど
待つことってないと思います。
それは、たとえば中継サーバ(たとえばFW)のタイムアウトにより
セッションが遮断されるなどでブラウザのタイムアウト値よりはるか
に早くタイムアウト処理がされているのではと考えています。
上記と同じ考え方をすると、Webサーバのタイムアウト値が60分以下
であれば、そのタイムアウトになったらWebサーバ⇒LBにセッション
切断の信号が送られるのでは???つまり、結果としてLBにセッション
がたまる事はないのでは??と思いました。
この考え方は正しいでしょうか?ちなみにWebサーバはApache2.2
(おそらく)です。

LB側の仕様の問題もあるかもしれませんので、その点はLB側のメーカ
に問い合わせてみようとは思いますが、もし上記に何かお気づきの点が
あれば教えていただけると嬉しいです。

どうぞよろしくお願いします。

補足日時:2010/10/23 19:05
    • good
    • 1

 お尋ねの件ですが、攻撃自体TCP/IP の本質的問題なので、防御は難しいですね。


 ファイアウォール製品の中には、SYN flood を自動検知して、一定時間以上確立されないままのハーフ・コネクションを強制的にリセットしてしまう機能を持つものもあります。
 専用のセキュリティ・ゲートウェイ機器の設置が望ましく、 対応機器としては、Yamaha製「SRT100」や大塚商会様のセキュリティ・ゲートウェイサービス(FortiGate、FireboxX e)等の利用が良いかと存じます。
 単純なルーターのみの環境ですと、SYN flood攻撃発生時にその通信のリセット機能は無いものが殆どです。Linuxサーバ等での対策で見ますと、カーネルコンパイル時に「CONFIG_SYN_COOKIES=y」、「/proc/sys/net/ipv4/tcp_syncookiesを1にする」、「コネクション確立時のウェイトタイムを短くする。」等が御座いますが、ウェイトタイム調整出来ない場合、ルータやスイッチによってSYNパケットの帯域制限を行うのが基本となります。

この回答への補足

回答ありがとうございます♪
要は、現在利用しているFWのサービス機能が足りない(タイムアウト時にRSTを送信しないため)ということでしょうか?
ものによってはFWでもRSTを送信するものがあるということでしょうか?
専用のセキュリティ・ゲートウェイ機器の設置とはFWとLBの間に設置すればよいのでしょうか?
回答だけ拝読して、まだ私の方で未調査のため、変な質問でしたら申し訳ありません。

「ウェイトタイム調整出来ない場合、ルータやスイッチによってSYNパケットの帯域制限を行うのが基本となります」
ということは、現状の設定(FW側で1セッション/としている)が現状できる最良の策であり、攻撃に備えるのであれば、LBの最大同時セッション数を3660にする、ということができうる対策ということで間違いないでしょうか。

自分の考えていることが正しいのかどうか、今一不安を覚えているので、ご回答いただければ嬉しいです。
よろしくお願いします。

補足日時:2010/10/23 08:26
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

QwiresharkでパケットモニタするとRetransmissionが多発しているという意味は?

現在、自分で作成したパケット送信クライアントプログラムをテストしており、3秒に1回のタイミングでインターネット上にあるサーバのグローバルipアドレスに対し、TCPパケットを発信させて受信するというテストを行っています。
しかし、3秒に一回データを送っているはずなのに、その間隔10秒とか20秒とか間隔が開いてしまう時があります。

wiresharkというパケットモニタソフトで送信側、受信側共にパケットモニタを行ってみたところ、”Retransmission”が多発しているということがわかりました。(tcp.analysis.retransmissionというフィルタ設定で検索)この現象はある時とない時があります。テストして10日ぐらい経つのですが、このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

わかる方いらっしゃいましたらご教授よろしくお願いいたします。

Aベストアンサー

簡単に言うと「トラフィック過多によるパケットの再送が多発している」です。

噛み砕いて言えば「回線が混雑していて、送信したパケットが、他の誰かが送信したパケットと衝突(コリジョンが発生)してパケットが消えた。なので、もう一度、送り直した」と言う事。

>このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

「お昼休み、終業時間の6時になると、みんな、メールをチェックしたり、個人的にインターネットを閲覧し、トラフィック過多が起き、回線が異常に混雑する」と言う事が起きていると考えられます。

解消するには以下の方法があります。
・「休み時間も、終業時間後も、プライベートでネットを使うな!」と言う「通達」を全社に出す
・社内LANを、トラフィック過多によるコリジョンが起きないよう高速で帯域のあるネットワークカード、LANハブ、ルーターに変える
・受信側と送信側を、社内LANから(電気的、アドレス的に)独立した別のLANにする

要は「混んでる時間帯なので仕方が無い」って事です。

簡単に言うと「トラフィック過多によるパケットの再送が多発している」です。

噛み砕いて言えば「回線が混雑していて、送信したパケットが、他の誰かが送信したパケットと衝突(コリジョンが発生)してパケットが消えた。なので、もう一度、送り直した」と言う事。

>このパケットが確認されるのはお昼の12時頃と夕方の6時頃が多いのですが、このことからどのようなことが起こっていると考えられますか?

「お昼休み、終業時間の6時になると、みんな、メールをチェックしたり、個人的にインターネットを...続きを読む

QSyn floodについて教えてください。(緊急;

先ほど、オンラインゲームのキャラクター
シミュレートと書かれているサイトを訪れたのですが
内容がすっかり変わっていて。
おかしいと思い直ぐに閉じました。

不安に思い、ウィルスバスターのファイアーウォール
ログを見てみると「Syn flood 」というものがビッシリと書かれていて、送信の文字が10個くらい表示されていました。
これは何か害のあるものなのでしょうか…?
今のところPCが使いにくくなるなどの症状は
起きていません。
念とため、これからペストパトロール。
spy-bot,ad-awareで検索をかけてみようと思います。
送信のログが残っているのは、その時間帯だけで
そのほかは受信となっています。
「Syn flood 」について何かご存知の方。
「Syn flood 」が送信したものとは一体何なのでしょうか。

どなたか詳しい方。どうすればいいのかわからず
困惑しています。どなたかご意見を聞かせてください。

Aベストアンサー

>ブロックしてくれたものには、
「セキュリティレベル設定によるブロック」
と書かれているのですが「Synflood」はそのまま
表示されていました。

ブロックリストにSYNFLOOD通信が載ってればとりあえずいいんだよ。

>少し不審に思ったことは、ウイルスバスターの
「送信/受信バイト」の量が多いことですが。
これはSynfloodに何か関係しているのでしょうか。

これは、SYNFLOODが発動したときに、ネットワークトラフィック監視ソフトみたいなやつを使って、リアルタイムに見てみないとはっきりとはわからないです。
俺の感的には関係してるような気がするけど。

>追加質問です。いろいろとすみません。
IPとはPC一台一台に振り分けられているものですか?
それともプロバイダによって振り当てられているものなのでしょうか。

IPアドレスはPCに限らず、ネットワーク機器すべてが割り当てられます。ISPから割り当てられるIPアドレスはルーター(モデム)に設定します(WAN側IPアドレス)。
モデムにルーター機能がないことがはっきりしたら、
別途、ルーターを導入してください。

>PCを買いえたとしてもプロバイダに
よって振り分けられているものだと
したらPCを買い換えても無駄に
なるのでしょうか…。

動的IPアドレスであれば、ルーター(モデム)を再起動すればIPアドレスが変わりますが、ISPによっては、
同じIPアドレスを使うようになっちゃってる事もあるようです。

>ブロックしてくれたものには、
「セキュリティレベル設定によるブロック」
と書かれているのですが「Synflood」はそのまま
表示されていました。

ブロックリストにSYNFLOOD通信が載ってればとりあえずいいんだよ。

>少し不審に思ったことは、ウイルスバスターの
「送信/受信バイト」の量が多いことですが。
これはSynfloodに何か関係しているのでしょうか。

これは、SYNFLOODが発動したときに、ネットワークトラフィック監視ソフトみたいなやつを使って、リアルタイムに見てみないとはっきりとはわ...続きを読む

Qネットワークのトラフィック量を測定できる方法はありますか?

 すいません。ものすごく困っております。

 会社の工場にPAnasonic製のネットワークカメラを20台程設置しているのですが、ネットワークへの負荷が大きいため、たびたび画像が固まることがあります。

 そこでどこの箇所で負荷がかかっているのか測定したのですが、なにかツールもしくは測定方法はないでしょうか。例えばHUBとHUBの間のLAN線にかかっているトラフィック量を測定してみたいです。

 すいませんが、ご教示願えないでしょうか。

 よろしくお願いいたします。

Aベストアンサー

HUBがSNMP対応のインテリジェントHUBであれば、そんなに難しい問題ではないですね。SNMPの設定を行った上で、ネットワーク管理ツールでトラフィックを計測すればOKです。

そうでない場合はちょっとやっかいですね。
とりあえず、ネットワークの図面を書いてみて、どこにどんなHubがあって、どんなPCやネットワークカメラなどの機器がつながっているかを書き出してみてはいかがでしょう?
具体的なトラフィックの数値がわからなくても、怪しいところはあぶり出せると思いますよ?

Qエクセルで計算すると2.43E-19などと表示される。Eとは何ですか?

よろしくお願いします。
エクセルの回帰分析をすると有意水準で2.43E-19などと表示されますが
Eとは何でしょうか?

また、回帰分析の数字の意味が良く分からないのですが、
皆さんは独学されましたか?それとも講座などをうけたのでしょうか?

回帰分析でR2(決定係数)しかみていないのですが
どうすれば回帰分析が分かるようになるのでしょうか?
本を読んだのですがいまいち難しくて分かりません。
教えてください。
よろしくお願いします。

Aベストアンサー

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるための指数表記のことですよ。
・よって、『2.43E-19』とは?
 2.43×1/(10の19乗)で、
 2.43×1/10000000000000000000となり、
 2.43×0.0000000000000000001だから、
 0.000000000000000000243という数値を意味します。

補足:
・E+数値は 10、100、1000 という大きい数を表します。
・E-数値は 0.1、0.01、0.001 という小さい数を表します。
・数学では『2.43×10』の次に、小さい数字で上に『19』と表示します。→http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
・最後に『回帰分析』とは何?下の『参考URL』をどうぞ。→『数学』カテゴリで質問してみては?

参考URL:http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるた...続きを読む

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Q実験に使えるsyn flood攻撃ツールをご存知でしたら教えて頂けないでしょうか。

セキュリティ対策ソフトの試験をしています。
実験に使えるsyn flood攻撃ツールをご存知であれば教えて頂けないでしょうか(違法性は無しで)。
以上、宜しくお願いします。

Aベストアンサー

バッチ処理でTelnetを操作してはどうか。

※セキュリティソフトの試験をしているという事ですのでそのくらいのスキルはあると判断させていただきました。

QNTP の TCPポートは?

NTPは123/UDPでようは足りると思うのですが、
WELL KNOWN PORTとかいろいろな資料に「123/TCP」ポートが割当たってます。
ntpd,ntpdate等でNTPを使う場合、実際には123/TCPは使われているのでしょうか?

Aベストアンサー

RFC1305では「ntpには123/udpを割り当てる」となっていますが、RFC1700では「123 ntp」となっており、「123/udp」と明示されているわけではありません。
よって、「123/tcp ntp」が間違っている(または使えない)という明確な根拠にはなりません。

「現状では『123/tcp ntp』を実装するための定義が存在しない」程度に考えた方が良いと思います。

ただ、将来的にRFC2030のSNTPが(IPv6対応などの点で)主流になる可能性があるので、「123/tcp ntp」は定義されない可能性もあります。

Qtopコマンドで表示される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

どうしてもズレるので画像を添付してます。

topコマンドで表示されるVIRT、RESおよびSWAPの意味について教えてください。
CentOS5.4上で動作しているアプリケーションの使用メモリについて調査しています。
サーバのメモリ容量は512MBで、この上でスワップアウトしないようにアプリケーションの起動数(常駐)を調整しようとしています。

topコマンドでプロセスが使用している物理メモリ容量はRES項目を見れば良いことがわかっていますが、VIRT(仮想メモリの総量)とSWAP(スワップされたサイズ)が具体的に何を示しているのかがわからず、困っています。
...続きを読む

Aベストアンサー

答えにたどり着く前に、若干長めの説明が必要です。

> 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

答えにたどり着く前に、若干長めの説明が必要です。

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

 RESは、ご認識の通り、そのプロセスの物理メモリ使用量です。

 VIRTとして表示されている仮想メモリ総量とは、そのプロセスの
仮想アドレス空間の中で、有効となっているページの総量です。
これに計上されるのは、参考リンクの「仮想記憶の概念図」でカラフルに
描かれている「物理メモリ」や「スワップ」に対応するページのほか、
以下のようなものも含まれます...続きを読む


人気Q&Aランキング