centosでウェブサーバーが稼働しています。
ウェブサイトが急に遅くなるときがあり、その都度、下記URLを参考にTOPコマンドを見たりしているのですがよく分かりません。
https://qiita.com/moriyaman/items/366f7eca5eda36 …
下記がそのときのTOPコマンドの状態です。
top - 21:10:21 up 1173 days, 6:25, 1 user, load average: 0.22, 0.21, 0.18
Tasks: 722 total, 2 running, 720 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.9%us, 0.3%sy, 0.0%ni, 98.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 65947456k total, 57379340k used, 8568116k free, 276608k buffers
Swap: 8191996k total, 126868k used, 8065128k free, 3976344k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27192 mysql 20 0 12.3g 117m 4052 S 9.3 0.2 89783:36 mysqld
16613 apache 20 0 1259m 22m 9932 S 3.0 0.0 0:00.80 httpd
16868 apache 20 0 1258m 21m 9512 S 2.6 0.0 0:00.61 httpd
17614 root 20 0 171m 11m 6592 R 2.0 0.0 0:00.06 php
16616 apache 20 0 1258m 47m 35m S 1.0 0.1 0:00.79 httpd
16948 apache 20 0 1259m 21m 8724 S 1.0 0.0 0:00.77 httpd
15194 apache 20 0 1260m 26m 12m S 0.7 0.0 0:01.80 httpd
スリープ状態のプロセス数が720あるのは目安として問題ない範囲なのでしょうか。
また、ウェブサイトは遅いのに、いつもロードアベレージは低いので
netstatコマンドでコネクション数を確認しましたが、下記のように3000ぐらいでした。
# netstat -an | wc -l
3313
また、下記URLを参考にvmstat コマンドを試してみたところ
http://www.sakito.com/2012/06/linux.html
https://www.denet.ad.jp/technology/2017/10/vmsta …
# 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 st
0 0 126868 8467180 276608 3981396 0 0 0 2 0 0 0 0 99 0 0
1 0 126868 8462600 276608 3981400 0 0 0 0 2029 2297 1 0 98 0 0
1 0 126868 8466544 276608 3981404 0 0 0 0 2242 2772 1 0 98 0 0
0 0 126868 8466332 276608 3981408 0 0 0 0 2163 2480 1 0 99 0 0
2 0 126868 8464228 276608 3981416 0 0 0 44 2876 3050 2 0 98 0 0
1 0 126868 8465336 276608 3981432 0 0 0 0 2599 2801 1 0 99 0 0
0 0 126868 8465612 276608 3981436 0 0 0 0 2507 2935 1 0 99 0 0
0 0 126868 8465228 276608 3981436 0 0 0 0 1971 2282 1 0 99 0 0
1 0 126868 8464608 276608 3981444 0 0 0 0 2838 3352 2 1 98 0 0
0 0 126868 8464340 276608 3981452 0 0 0 72 2115 2596 1 0 99 0 0
となりました。
たまにrの値が3のときもありましたが、特に問題ないように感じました。
上記のデータだけで何が原因なのか分かるものでしょうか。
また、他に原因の見つけ方がありましたら教えていただけると幸いです。
No.2ベストアンサー
- 回答日時:
ぱっと見ですが、一時的にメモリが枯渇したのではないかと想像します。
私が見たポイントは、swapです。
このサーバには64GBのメモリを搭載しているようですが、万が一枯渇したときのためにスワップ領域を8GB確保しているようです。
通常、メモリ容量に余裕があるときは、スワップ領域は一切利用しませんが、topの結果を見ると120MB程度スワップ領域を使用しています。ということから、一時的にメモリが枯渇し、動いていないプロセスのメモリ領域がスワップに追い出されたということがわかります。なんだ、たった120MBじゃないかと思われるかもしれませんが、一時的に退避されたメモリも、物理メモリに余裕ができたときには動き出すタイミングでそちらに戻ります。最悪な状況ではもっとスワップに追い出されており、それがパフォーマンスを阻害する要因だったのではないかと想像します。
LAMP構成のWebサーバでメモリを大量に使うソフトウェアは、mysqlか、phpが代表的です。また、httpdはpreforkモデルで起動していると思いますので、接続数が多くなりかつphpなどのプログラムが同時にたくさん走ったりすると、これもメモリを食う要因になるかもしれません。もしかすると、messagesあたりにoom killerのログが出ているかもしれませんので、一度確認してみるといいかもしれません。
ちなみに、No.1の回答でworkerと言及がありますが、運用しているサーバがCentOS7以前でPHPのバージョンが5系だったりすると、このPHPはスレッドセーフではないので、httpdはpreforkでないと動きません。
お返事ありがとうございます。
スワップによるパフォーマンス低下のご指摘ありがとうございます。
また、文中でご指摘されているとおり、phpとmysqlで構成されたウェブサイト群を運営しております。
messagesを確認しましたが、該当日のログが削除されてしまっており、oom killerを確認できませんでした。
preforkは以下の設定になっているのですが、もし設定変更した方がよい箇所がありましたらアドバイスいただけると幸いです。
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
Server version: Apache/2.2.15 (Unix)
Server MPM: Prefork
どうぞよろしくお願いいたします。
No.3
- 回答日時:
>もし上記の設定をチューニングすることでパフォーマンスがアップするのであれば~
設定値だけ見て良い悪いがわかるものではありません。
アプリの作り、メモリの状態、CPUの状態などいろいろな要素を見ながら増やしたり減らしたりしていくから「チューニング」なわけですから。
No.1
- 回答日時:
>また、他に原因の見つけ方がありましたら教えていただけると幸いです。
httpdはapacheかと思いますが、チューニングはしていますか?
Webサイトの作りやコンテンツにもよりますが、preforkなのかworkerなのか、KeepAliveを使うか、ServerLimitやMaxClientsなどの設定はサーバのリソースを有効に使えるような数値になっているかとか。
これらが大きすぎて実メモリを超えてしまうとスワップするので、これはwebサーバとしては致命的です(拝見したところ大丈夫そうですが)。
またmysqlをお使いのようですが、場合によってはここがボトルネックになってサイトの反応が遅くなることもあり得ます。 スロークエリログ (Slow query log)をとってみるといいかもしれません。
いずれにせよいろいろな角度で考えながら、考えうる可能性をひとつづず潰しながら原因を突き止めていくしかないと思います。
そういう意味ではトータルに監視できるmuninあたりを仕込んで継続的に各種リソースの監視をしてみてはいかがでしょうか。
お返事ありがとうございます。
ご指摘の通り、チューニングはほぼしていない状態です。
preforkで、KeepAliveはOffになっていました。
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
ServerLimitやMaxClientsなどの設定は下記のようになっております。
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
「考えうる可能性をひとつづず潰しながら原因を突き止めていくしかないと思います」とおっしゃる通りだと思います。
もし上記の設定をチューニングすることでパフォーマンスがアップするのであれば試したいのですが、もし気になる点などありましたらアドバイスいただけると幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL Mac です。ローカルホストの phpMyAdmin にアクセスできません。 1 2023/06/06 17:14
- オープンソース AWSドメイン名でApacheテスト・ページを表示させる方法を教えて下さい。 1 2023/04/26 15:59
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- MySQL UPDATE my_items SET item_name '赤い,甘い,ケーキ' WHERE id 1 2023/01/03 09:52
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- PHP eclipse pleiades phpのインストールについて 1 2023/02/03 17:15
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- その他(コンピューター・テクノロジー) (コマンドプロンプト)コマンドプロンプトのactiveについて 2 2022/07/16 17:21
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
topコマンドで表示されるVIRT、...
-
CPU 使用率について(ps,top,sar)
-
TOPコマンドで表示するCPU使用...
-
SONYの音楽ソフト「x-アプリ」...
-
Dirコマンドでフォルダ内ファイ...
-
ddコマンドでイメージをコピー...
-
エクセルの表にヘンな枠が・・・
-
ラズパイで『’test.service’をs...
-
Linux環境 grepで改行コード(CR...
-
bashでシングルクォート内の変...
-
SCコマンドでアクセス拒否
-
Diskをマウントできません。
-
batである文字列内に特定の文字...
-
UNIX コマンドにおける # や円...
-
DOSコマンドのFOR文で空白を含...
-
空きIPアドレスを探す方法
-
ファイル名一覧の印刷
-
Excel下部のメニューが消えた
-
ddコマンドの使い方
-
アクロバットを終了しても、プ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
topコマンドで表示されるVIRT、...
-
CPU 使用率について(ps,top,sar)
-
ps aux ps auxw psauxwwの違い
-
freeとpsでメモリ使用量が違う?
-
Linuxが突然フリーズしました
-
postaliasとpostmapコマンドに...
-
DNS(BIND)を起動できない
-
Linux OS 上でのマシンスペック...
-
サイトが重く、load averageが高い
-
freeコマンドのfree,swapについて
-
FreeBSDでのCPU占有率とメモリ...
-
【メモリ]】vmstat、free、top...
-
AIXでシステム内の全プロセスメ...
-
実行中のプロセス数をカウント...
-
Dirコマンドでフォルダ内ファイ...
-
TOPコマンドで表示するCPU使用...
-
SONYの音楽ソフト「x-アプリ」...
-
スクリプトのエラー「unexpecte...
-
エクセルの表にヘンな枠が・・・
-
batである文字列内に特定の文字...
おすすめ情報