web-dev-qa-db-ja.com

ウェブサイトの読み込みが遅く、メモリ使用量が多い

私のサイトはここ数日遅くなりました...いくつかの画像が表示されません...私は得ました

408 Request Time-out: Server timeout waiting for the HTTP request from the client 

これまでに起こったことのない数回。

私は少しパフォーマンスチェックをしました、基本的にsshのトップコマンド

これが結果です

http://up.akstube.com/images/vdtebe9sr10si1eyycd.jpg

ご覧のとおり、メモリ使用量は非常に高いです...または私はそう思います。

サーバーを再起動しました...サーバーはダウンしましたが、しばらくすると再びアップします....(これは再起動後約1時間です)

http://up.akstube.com/images/49xjeylxy0st7vwn4ojl.png

30分後=>

    top - 16:14:22 up  1:56,  2 users,  load average: 0.62, 0.90, 1.15
    Tasks: 303 total,   1 running, 302 sleeping,   0 stopped,   0 zombie
    Cpu(s):  8.0%us,  0.2%sy,  0.0%ni, 91.4%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
    Mem:  32840004k total, 21037648k used, 11802356k free,   430832k buffers
    Swap:  1050616k total,        0k used,  1050616k free, 16527108k cached

たった今

[root@ns4008353 ~]# top
top - 16:33:25 up  2:15,  2 users,  load average: 0.88, 0.94, 0.98
Tasks: 303 total,   3 running, 300 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.8%us,  0.2%sy,  0.0%ni, 92.8%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:  32840004k total, 22388160k used, 10451844k free,   434964k buffers
Swap:  1050616k total,        0k used,  1050616k free, 17324104k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 7532 mysql     20   0 3750m 492m 5556 S 18.0  1.5  49:53.58 mysqld
12903 Apache    20   0  232m  40m 4864 S 16.3  0.1   0:56.74 httpd
 7748 Apache    20   0  235m  43m 5256 S 11.6  0.1   1:33.36 httpd
 8010 Apache    20   0  262m  70m 4856 R  6.7  0.2   1:32.05 httpd
 7747 Apache    20   0  235m  43m 5220 S  1.3  0.1   1:06.37 httpd
 7749 Apache    20   0  222m  30m 5164 S  1.3  0.1   1:58.53 httpd
 7996 Apache    20   0  250m  59m 5476 S  1.3  0.2   1:37.37 httpd
   10 root      20   0     0    0    0 S  0.3  0.0   0:09.72 rcu_sched
 7714 Apache    20   0  265m  73m 4972 S  0.3  0.2   1:34.53 httpd
 7905 named     20   0  669m  24m 3020 S  0.3  0.1   0:02.01 named
 7999 Apache    20   0  232m  40m 4968 S  0.3  0.1   1:17.67 httpd
20865 root      20   0     0    0    0 S  0.3  0.0   0:01.05 kworker/2:2
21491 root      20   0 15212 1308  852 S  0.3  0.0   0:01.38 top
23810 root      20   0 15212 1340  852 R  0.3  0.0   0:00.07 top
    1 root      20   0 19404 1568 1268 S  0.0  0.0   0:00.58 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd

無料m

[root@ns4008353 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         32070      21897      10173          0        424      16955
-/+ buffers/cache:       4516      27553
Swap:         1025          0       1025

これが反応が遅い理由だと思いますか?何がメモリを使用しているかについての詳細を取得するためのコメントはありますか?


私は専用サーバーを持っています:

Processor Name  Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz
Vendor ID   GenuineIntel
Processor Speed (MHz)   1600.000
Total Memory    32840004 kB
Free Memory 10416752 kB
Total Swap Memory   1050616 kB
Free Swap Memory    1050616 kB
System Uptime   0 Days, 2 Hours and 22 Minutes
Apache 2.2.24   Running
DirectAdmin 1.43.0  Running
Exim 4.76   Running
MySQL 5.5.31    Running
Named 9.8.2rc1  Running
ProFTPd 1.3.4d  Running
sshd    Running
dovecot 2.2.4   Running

PHP5.3.26インストール済み

ログファイルを調べた後、このエラーがたくさん見られました

[Sat Sep 28 00:15:41 2013] [error] [client 66.249.73.162] Request exceeded the limit of 10 internal redirects due to probable co
nfiguration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace
1
max

変更されたリクエストURIを再挿入するのは通常.htaccessファイルです。それを確認してください。また、設定ファイルをリセットすることもできます。

2
mojtaba zavar

あなたの問題の説明は遅いHTTPリクエストですが、あなたが示したように、CPUとメモリは使い果たされていません。したがって、確認すべき点がいくつかあります。

  • リクエストが本当に遅いことを確認してください。 httpd.confで、次の行を見つけます。

LogFormat "%h%l%u%t \"%r\"%> s%b"共通

そして、%bの後に%Dを追加します(ただし、終了引用符の内側)。 http://httpd.Apache.org/docs/2.2/mod/mod_log_config.html#formats を参照してください

次に、httpdをリロード/再起動すると、access_logファイルの最後の列に各応答にかかる時間がマイクロ秒単位で表示されます。これらが遅いことを確認してください。たぶん、いくつかのタイプのリクエストだけが遅いですか? MySQLがCPUを使用していることに気付いたので、おそらく1つのタイプのリクエストが遅いデータベースクエリにヒットしていますか?

  • 上記の応答が本当に遅く、明らかなパターン(特定のページなど)がない場合は、どこで遅いかを判断する必要があります。 %D時間には、クライアントからの要求の読み取り、ファイルの提供(アプリケーションコードまたはデータベースクエリを含む)、応答の書き込みなど、すべてが含まれるため、速度が低下していることがわかりますが、必ずしもどこにあるかはわかりません。だから今、あなたは減速がどこにあるかを分離する必要があります。まず、アプリケーションを確認します。 MySQLの低速ログも確認してください(有効になっていない場合は有効にしてください)。

  • Error_logを確認してください-アプリケーションのタイムアウトやその他のエラーが発生している可能性があります。

  • 運が悪い場合は、定期的にpstack ${PID}を実行して、httpdが何をしているのかを理解することもできます。

  • 最後に、tcpdumpやWiresharkなどを使用して、速度低下がどこにあるかを特定できますが、少し面倒です。リクエストの時間を分解するhttpdモジュールもあると思いますが、今は見つからず、組み込みモジュールのリストにも表示されません。

0
Infofinity

メモリ使用量は高くありません。トラブルシューティングからその部分をスキップして、Inforfinityが提案したことを試してください。

Linuxカーネルは、ディスクキャッシュに使用可能な未使用のメモリを占有する傾向があります。それはシステムをより速くします。アプリケーションにメモリが必要な場合は、キャッシュ自体からメモリを取得します。つまり、基本的にメモリが不足しているわけではありません。 free-mの出力を考えてみましょう

-/ +バッファ/キャッシュ:4516 27553

4516MBの実際のRAMが使用されており、27553が実際の空きメモリです。17Gに近い値がキャッシュされます。

Webサーバーでパフォーマンステストを実行してみてください。 httperfを使用してベンチマークを行います。

httperf --server yoursite.com --port 80 --num-conns 100 --rate 10

0
sandeep.s85