負荷を調べる時のメモ
PHP
動作が数秒以上かかっている動作がまとまっている、スロウログがある。
var/log/php-fpm/下に大体ある。
スロウログの場所や設定は、confファイルで調節できる。
code:vim /etc/php-fpm.d/www.conf
; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
slowlog = /var/log/php-fpm/www-slow.log # これ
# 以下で、秒数を決めるとそれ以上動作秒数があった場合ログに起こしてくれる
;request_slowlog_timeout = 0
適用後はsystemctl restart php-fpm.serviceなどで。
おまけ
php --iniでiniファイルの場所を探せる
CloudWatch
AWS使ってるなら便利。メトリクスから、欲しい情報を選択する
わからないなら、AWSが調査のために置いてくれているテンプレートみたいなのがあるのでそれを見る。
単純なアクセス量と、5xxエラーなどの数を見たいならELBの値を参考とすれば良い
全て > Application ELB > AppELB別メトリクスなどで、以下の要素などを取ってみるなど。
RequestCount
HTTPCode_Target_5xx_count
HTTPCode_Target_2xx_count
コマンドたち
vmstat 1 10など
CPU使用率を表示する。かあスレッドのはこんな感じ
code:txt
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 465700 62988 55028 325892 0 0 2 4 1 0 0 1 99 0 0
table:リクエストが詰まって、重いときのvmstatの結果
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 58948292 2088 2084320 0 0 0 0 19800 8808 17 1 83 0 0
大事な要素だけ下記に抽出して説明しておく
procs
r: ランタイム待ちのプロセスの数。重くなってもこの辺りはそんなに暴走しない
memory
swpd: 使用中のメモリ
free: 空き
buff: バッファとして使っているメモリ
データを処理するときに一時的に保管するというような役割のこと
cache: キャッシュとして使っているメモリ
使用頻度の多いデータを保管するメモリという感じ
swap
io
system
in: cpuへの割り込み回数
cs
1秒あたりのコンテキストスイッチの回数。重いとめちゃめちゃ多くなることがある
実行中のタスクを停止し、別のことに切り替えて実行を再開すること
頻繁に発生していた場合、ロスが大きい(ロス = オーバーヘッドと呼ぶ)
cpu (全部の数値を足すと、ちょうど100%になる)
us: 通常のプログラムが動いていた時間の割合
sy: カーネルの処理(OSの処理など)に要した時間の割合
id: アイドル時間。cpuの空き時間
wa
データの入出力待ちの時間
ネットワークなどのアクセスを試みて、データを待っていた時間の割合
st: 仮想マシンなどから盗まれた時間
ps aux
table:ps aux ヘッダー
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
基本grepとパイプにして使う。
Linux上で動いているプロセスを確認するコマンド
USER: プロセスの所有ユーザー
PID: プロセス番号
VSZ, RSS: 仮想メモリと物理メモリなどの使用量
TT: 端末名
STAT: プロセスの状態
R: 稼働中
S: 一時停止中
D: 停止不可能で一時停止
T: 終了処理中
Z: ゾンビプロセス
W: 実メモリ上にはなく、スワップアウトしている
N: nice値
各プロセスの優先度のこと。
STARTED: 開始時刻
TIME: 総実行時間
COMMAND: 実行コマンド名、もしくはパス
重い処理を切るときは、kill 4xxxxのように、PIDを指定してやれば良い。
top
実行中のプロセスを確認するコマンド
CPU使用率が高い順に表示される