ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

apache2.0 での質問です。

(1) httpd.conf にMaxClientsを設定できますが、この値を超えたリクエストがあった場合に特定のページに遷移させる方法はありますか?
例えば「大変混み合ってます」とか。
MaxClients値を越えた際に503のステータスコードを返すようであれば問題ないのですが、そうではなさそうなので・・・
(この認識はあってますか?)
何か追加でモジュールを入れる必要があるのでしょうか?

また、MaxClients値を超えたリクエストがあった場合、そのことを示すログは出力されますか?


以上、宜しくお願い致します。

A 回答 (1件)

MaxClients はプロセス数の制限です。


apache のドキュメントには、超えたリクエストは ListenBackLog で
指定した数までキューに入る、とありますので
特定のページに転送、というのは難しそうに思えます。
(特定のページが表示できるのであれば httpd は普通にリクエストに
応答できている、という考え方もできますが。。)

MaxClients 値を超えた場合は error_log に
server reached MaxClients setting,
consider raising the MaxClients setting
というエラーメッセージが出るようです。

MaxClients ディレクティブ
http://httpd.apache.org/docs/2.0/ja/mod/mpm_comm …
httpd.confによるWebサーバの最適化
http://www.atmarkit.co.jp/flinux/rensai/apache2_ …
    • good
    • 0
この回答へのお礼

やはり難しそうですね。
エラーメッセージは大変参考になりました。
ありがとうございます。

お礼日時:2007/07/20 00:46

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QApache2のlistenbacklogについて

 マルチプロセスモデルのApache場合は
maxclientsまでプロセスがあがり、httpリクエストに対して
対応ができると思いますが、同時にmaxclientsを超えた要求が
来た場合、listenbacklog(listenシステムコールのbacklogで指定した
キューのようなもの)に入ると思います。
 こうなった場合に何か警告などをシステム管理者が検知したり
ユーザーに対してアクセスを停止してしばらくしてからやり直してください
 等を表示させることはできないのでしょうか?

Aベストアンサー

> 何か警告などをシステム管理者が検知したり

error_logにlogが残るはずなので、error_logを監視する仕組みを作れば可能だと思います。

> ユーザーに対してアクセスを停止してしばらくしてからやり直してください等を表示させることはできないのでしょうか?

これは、ユーザに応答できないときに「応答できない」ことを応答できるか?、と聞いているのと同じです、できません。

Qapacheの同時接続数とリクエスト数について

同時接続数についてですが、KeepAliveをOffにしていた場合、
1接続で1プロセス起動し処理すると思うのですが、
仮に、1ページに20枚の画像があったとすると21リクエスト、
1ページを表示するのに、html+20枚=21プロセスが必要という事になりますか?

そのページを表示させているクライアントは1台のPCでも、
同時接続数=21 となってしまうという事になるのでしょか?

初歩的な質問なのかもしれませんが、ご教授頂ければと思います。

Aベストアンサー

ブラウザは必要なリクエストを全部同時に出すわけではありません。設定によりますが、標準的には4リクエストずつ出します。
1. まずHTMLをリクエストして取得
2. HTMLを解析して20の画像が必要と判断
3. そのうち4つの画像をリクエスト
4. どれかの画像が返ってきたら残りのなかから1つをリクエスト
5. 4をのこりが無くなるまで繰り返す

この場合、クライアントが1台なら最大4プロセスが働きます。

べつに4プロセス必要というわけでもなく、最大1プロセス起動するという設定でも、待ちが長くなるだけで問題ありません。クライアントが多いと長くなりすぎてタイムアウトする可能性もありますが。

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(を含む...続きを読む

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起動しているサービスを確認するコマンド

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

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

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

Aベストアンサー

(1)service --status-all

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

(2)chkconfig --list

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

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

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

Qhttpdの子プロセスがゾンビ化する原因

httpdは複数の子プロセスを生成しますが、この子プロセスがゾンビプロセス化してしまう
ことがあります。
このゾンビ化してしまう原因として考えられるものを教えて下さい。

『何らかの理由で子プロセスが停止せずに親プロセスが停止した』等、あいまいな答えでも
構いません。もちろん具体的であれば、とても助かりますが…。

思いつく限りいくつでも構いませんので、教えて下さい。

ちなみに、私が使用しているマシンで上記現象が発生している訳ではなく、一般的な事例として
子プロセスのゾンビ化の原因になり得る事象を知りたいと思っていますので、構成情報などは
あまり気にせずに答えて頂けると幸いです。

よろしくお願いします。

Aベストアンサー

ゾンビプロセス一般について書きます。

ゾンビプロセスとは、プロセスの実体は無いが、プロセステーブル(カーネルがプロセスを管理してる台帳)に
エントリーがある状態を指します。

名簿に名前があるけど、本人は居なくなっちゃってる、と。

あるプロセスが終了したときには、必ず一瞬でもこの状態になります。
通常は、プロセスが終了したというシグナルが親プロセスに通知され、親プロセスが後始末を
してあげて、めでたくゾンビ状態ではなくなるのです。

もし、親がシグナルを受けたときに適切な処理を行っていなければ、親プロセスが終了するか
システムが再起動するまで、ゾンビ状態のままです。

> このゾンビ化してしまう原因として考えられるものを教えて下さい。

子プロセスからのシグナルを受けたときの処理がまずい、のが原因です。

QTCP/IPポートの最大接続数は

Web設計始めたばかりです。
基本かもしれませんが教えて下さい。
httpであれば80ポート、ftpであれば20ポートを
使って通信していますが
このポートへの接続数と言いますかアクセスできる
最大数でTCP/IPの規格またはOSで決まって
いるのですか。決まっていれば幾つ。
例えば1つのWebサーバに何万という利用者が同時に
アクセスしている状況ってhttpの80ポートを全員が
利用しているのですか。

Aベストアンサー

こんにちは
規格上の制約はありません。
主にServer のスペック(CPU/メモリ)に依存します。
実際の話となると、各ベンダー/SIer のノウハウの部分ですので、
そちらに確認される事をオススメします。

次に、利用するソケットでの制限(?)が考えられます。
以下のURL や”listen backlog”、”TCPソケット listen数”をキーワードに探してみてください。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/advanced.html

また、忘れてはならないのが、Server までの通信経路上のNW 機器の制約です。
特にFirewall やSLB といった機器は、
秒間の最大同時セッション数/新規セッション数などが仕様上決まっています。
ルータのスループット/パフォーマンスなどに注意が必要です。

その他、アプリケーション性能管理について参考になりそうなページを紹介しておきます。
http://www.empirix.co.jp/PlectureVol5/

QVMWare仮想ソケット数とソケットあたりのコア数

VMWareバージョン5.0から仮想OSに割り当てるCPUの設定で仮想ソケット数とソケットあたりのコア数というのがあり、それぞれを掛けた値が仮想OS毎のコア合計数となる様です。
以下の内容について教えていただけませんでしょうか。

(1)ソケット数とコア数がどのようなものなのかというのが解っていません。
どのように算出された計算値からこれを設定すればいいのか教えていただけますでしょうか。

(2)コア合計数を2としたい場合仮想ソケット数を2にし、ソケットあたりのコア数を1にする
 のでしょうか?それとも逆に仮想ソケット数を1にし、ソケットあたりのコア数を2にすれば
 良いでしょうか?

宜しくお願い致します。

Aベストアンサー

ちょっとかじった程度の技術者です。
専門家ではないので参考程度に。

(1)コアはCPUの中にあり、実際に計算をする部分になります。
複数のコアを持っているCPUは同時に複数の処理をする事ができます。

コア数はCPUによって決まっていて、1つのCPUに2つとか4つとか複数のコアが
搭載されている場合があります。(例:デュアルコア=2個、クアッドコア=4個)

ソケットとはCPUを搭載する部分の事で、1つのソケットに1つのCPUが載ります。

という事で、例えば「クアッドコアのCPUを2個搭載」した場合、
・コア数=4
・ソケット数=2
となり、仮想OSに割り当てられる仮想CPUは「4×2=8個」となります。

(2)仮想ソケット数については「どの様な挙動をさせたいか」「OSの制限」
などによって異なると思います。

デュアルコアCPUが1個搭載されているような挙動を期待しているなら
仮想ソケット数を1に、コア数を2に。
シングルコアのCPUが2個搭載されている様な挙動を期待しているなら
仮想ソケット数を2に、コア数を1に。

OSの制限についてですが、OSによってはソケット数が決まっているケースがあります。
WindowsXPの場合はCPUが2個までしか載せられなかったと思います。
その時は仮想ソケット数は「2」までしか設定できない事になり、仮想CPUを4つに
設定したい時は仮想ソケット数を2に、コア数を2に設定する事になります。

という事でこの場合は「環境と希望による」という回答になると思います。

ちょっとかじった程度の技術者です。
専門家ではないので参考程度に。

(1)コアはCPUの中にあり、実際に計算をする部分になります。
複数のコアを持っているCPUは同時に複数の処理をする事ができます。

コア数はCPUによって決まっていて、1つのCPUに2つとか4つとか複数のコアが
搭載されている場合があります。(例:デュアルコア=2個、クアッドコア=4個)

ソケットとはCPUを搭載する部分の事で、1つのソケットに1つのCPUが載ります。

という事で、例えば「クアッドコアのCPUを2個搭載」した場合、
・コア数...続きを読む

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

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

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(外部サービスです)の仕様の問題なのでしょうか?

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

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

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

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

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

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


サーバ構成としては、下記のようになっております。
FW ⇒ LB ⇒ WE...続きを読む

Aベストアンサー

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


人気Q&Aランキング