Help us understand the problem. What is going on with this article?

LAMP 環境で、負荷が高いとき・サイトが重いときの、原因あるある

1年に数回はきます。たまに全く知らない環境の調査依頼もきます。
いつも経験則でやってましたが、最近記憶力が低下してきたので、いまのうちに一度まとめます。

思い出しながら書いてみましたが、個人的には、「SQLが悪い」がほとんどだったような気がしてます。

Linux

  • iptableが通信パケットを捨ててる

→ /var/log/message をみてエラー頻発していることがある。思い切ってマネージドサービス(AWS環境ならセキュリティグループ)にお任せして、iptablesを止める。

# systemctl stop iptables
# systemctl disable iptables
  • 3G回線とか地下鉄などの回線が弱い状況にいる利用者が回線つかみっぱなし

→ 下記コマンドで、TIME_WAITが大量にある場合、サーバのローカルポートを食い潰していることがある。
 https://qiita.com/kuni-nakaji/items/c07004c7d9e5bb683bc2
 の対策を実施してみる。

# netstat -anp

Apache

  • クローラー(攻撃)

→ 下記コマンドで、特定IPからのリクエストが多く、明らかに攻撃用のアクセス(../../etc/passwd的な)がある場合は、IP制限をかける。

# cat /var/log/httpd/access_log | cut -f1 -d" " | uniq -c | sort -r
  • クローラー(攻撃じゃない)

→ 攻撃と判断できず、IP制限かけるわけにもいかない場合は、robots.txt に書く。※基本効果なし。。

# vi ./robots.txt

Crawl-delay: 10
  • ファイルディスクリプタを上げてない

→ 昔から、limit.confが効かないから起動時にするとかなんとかで、ややこしくなって、結局よく設定を忘れられてる or 間違っている。いまは、こんな感じ↓
 https://qiita.com/SkyLaptor/items/7e57d98d8540296d6143

MySQL

  • 適切なIndexが貼れていない

→ 下記コマンドで叩いて、実行中のSQLを確認。Timeが長いものがあれば、EXPLAIN で確認。

> show full processlist \G
> EXPLAIN <SQL文> \G
  • Where以下の検索条件の一番左がIndex効いてない
  • Whereの一番左がIN句を使っている

→ Whereの一番左をインデックスを使うカラムを条件にして、精査するレコードを減らす。

  • InnoDB系のメモリ設定が間違っている
  • ディスクI/Oが高い

→ 下記コマンドで叩いて、reads/s が0になっているか、Free buffers に余裕があるか確認。余裕なかったらメモリのInnoDB系の設定にふる。

> SHOW ENGINE INNODB STATUS \G
  • どうもロックがかかっているっぽい

→ 下記コマンドで叩いて、LATEST DETECTED DEADLOCK を確認する。

> SHOW ENGINE INNODB STATUS \G
  • QueryCacheが効いてない

→ キャッシュヒット率が低ければ使わ無いほうがいいです。メモリ不足の場合は割り当ててあげてください。
 https://qiita.com/mamy1326/items/d1548d8cf4528277172a

  • 複文がえらいことになってる

→ 頑張ってSQLを直す。こればっかりはもう。。

PHP

  • キャッシュ機能つかってない

→ Opcache(もしくはAPC)は使うべきです。普段大丈夫でも、同時に大量アクセスがあるとえらいことになります。

  • gethostbyaddr関数使ってる

→ たまにあるんですが、できるなら使うの止めたほうがいいです。名前解決待ちが多発するとえらいことになります。

  • sleep関数を使ってる

→ たまにあるんですが、できるなら使うの止めたほうがいいです。同時に大量アクセスがあるとえらいことになります。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away