iowaitがパンッパンでいろいろと遠回りしてしまった件

3ヶ月くらい前からサーバーが重いという報告が来ていて
その時はphp7にアプデしてだいぶ改善されて放置。
(確かLA10近くから3付近になったはず)

そのサーバーが最近またすんごく重くなっていて(LA20付近)
いろいろとハマったのでメモ

まずは
topコマンドで見てみるとiowaitが20%近くあって

ぱっと目についたのは
kblockd
jdb2/md2-8
flush-9:1,2

というプロセス(スクショはpidstat -d ですが)

PIDも低いし実行ユーザーrootだし
バックアップ系かな?(今思えばこれが壮大な罠)

iostat -xt 5

で%utilが常にhda,hdbともに100%近く。

ここでサーバー屋さんにお問い合わせ。
GMOさんの対応の速さ神やで。

しかし挙動としては正常らしい。

dd if=/dev/zero of=/tmp/hoge bs=1KB count=1024000 ; rm /tmp/hoge
dd if=/dev/zero of=/tmp/hoge bs=1MB count=1024 ; rm /tmp/hoge

で1G書き込むも全然問題なさそう。
さらに頭が_???_なわけです。

もういちど状況を整理しプロセスの
kblockdってもしやビットコイン系かな?などと迷走しましたw

lastやlastlogコマンドであやしい挙動がないか確認。

ここで固定IPからログインがあることが判明。
そのユーザーを渡してる方に質問するとISP固定回線とのこと。
ちょっと安心。

lastコマンドのrebootユーザーが300日(これが正常なのは知ってた)
その2行上にrootユーザーが still login
これをまたもやGMOさんにお問い合わせ

これはシリアルコンソール用のログインとのことでこれも正常。

ビットコイン系とか迷走してたクラッキングはなさそうだとして、
重い原因が結局わからん。

ここで怪しいと思っているプロセスのNICE値を上げる(優先順位は下がる)

しかし変化なし。ん?変化なし。。。
バックアップ系とかデフォルトプロセスの暴走だと
踏んでたのに前提が崩れたぞ。。。

とりあえずサーバーのバックアップを取って再起動。
しかし良くなるはずもなく。

状況を整理。

reniceしても状況が良くならなかったので
全体のNICE値を確認。

上記スクショの内容よりNICE値が低いものは
httpd,php,mysqlなどなど

ここで20ドメインほど入っているサーバーの各設定を見直す。

キャッシュ系プラグインの見直し。
Mysqlも一通り見てみる。
うーん問題なさそう。

ログの肥大化?
問題なさそう。

Apacheのアクセスログをオフに。
******************************
Pleskコアファイルをイジらないといけないよ
https://support.plesk.com/hc/en-us/articles/115000067345-How-to-disable-Apache-and-nginx-log-files-for-domain-domains
******************************

状況変わらず。

duコマンドやpleskの管理画面から肥大化しているフォルダがないかここで確認。
問題なし。

念の為wp-content/cache/のファイルの数を数えてみた。

するとサイトの一つのobjectフォルダ配下に240万のファイルが。。。
これっぽいということで
プラグインをオフにしたあとに、removeしました。
(通常の削除はタイムアウトしたし)
pleskのサイズ計算や、もっと上の階層からのduでは
ファイルの数が多すぎて計算結果が出ていなかった。

サーバーが重くなっていることもあってrmコマンドの完走に12時間ほどかかりましたw

結論:W3 Total Cache のObject cacheの設定には気をつけましょw

ということで開発案件をすすめますっ

色々と使えるコマンド_troubleShootingの取っ掛かりに使える系

アクセスログからipを抽出してランキング化するコマンド

Plesk環境でエラーログからipを抽出して多い順にソートしたかったので組んだ1行コマンドです。
自分用メモ兼ご指摘マサカリ大歓迎です。

cat /var/www/vhosts/Domain_Daoyo/logs/error_log |grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort |uniq -c|sort -30

同時接続数を表示するコマンド

watch -d -n 1 "netstat -alpn | grep -E ':(80|443) ' | awk {'print $5'} | sed -e 's/\:[^.]*$//' | wc -l"

意訳:
watch -d -n 1 “COMMAND”
-n … 指定した秒数ごとに COMMAND を実行します。
-d … 実行結果の差分をハイライト表示します。

netstat -alpn すべてのネットワーク状態をポート付き&名前解決なしで表示します。
grep と awkで5番目のカラムを出力 →Sed でポート番号削除 最後にカウント

参考:https://qiita.com/hidekuro/items/e75c42390eda6a63b445

 

各ドメインのエラーログのファイルをを更新順で表示。リアルタイムで全部更新されてたら顔真っ青になるやつ。

ls -lth /var/www/vhosts/*/logs/error_log

サイズ順の際は
ls -lhS でおk

ディレクトリを多い順に表示する
# du -m | sort -rn | head -100

117827.
113328./var
109083./var/www/vhosts
109083./var/www
105184./var/www/vhosts/jyukusiri.net
100166./var/www/vhosts/domain_name/httpdocs
100139./var/www/vhosts/domain_name/httpdocs/wp-content
 95853./var/www/vhosts/domain_name/httpdocs/wp-content/cache
 95259./var/www/vhosts/domain_name/httpdocs/wp-content/cache/log/000000

 

dbcache.logが100G近くありました。
これって消していいのかしら。。。
追伸_dbcache.logはw3totalcacheのdbのデバッグログでした。

2018/06/18
iowaitが多すぎて現在調査中
85 0.0 0.0 0 0 ? S 2017 104:23 [kblockd/3]
1116 0.0 0.0 0 0 ? D 2017 394:28 [md2_raid1]
1377 0.0 0.0 0 0 ? S 2017 368:16 [jbd2/md2-8]
1382 0.0 0.0 0 0 ? S 2017 13:25 [flush-9:1]

blockでioしまくりってビットコイン系のクラックが怖いZO
緊急課題ですな

特定のファイルがエラーを履いている時にそのファイルのパスを特定する

find /var/www/vhosts/ -name hoge.php -type f 2>/dev/null

pleskが入った状態で納品されたサーバーのMysqlにログイン
mysql -u admin -p$( cat /etc/psa/.psa.shadow )
(あんまりセキュリティ的によくなさそうだけども、、、)

自分用メモ|[error] server reached MaxClients setting, consider raising the MaxClients settingがでた

サーバーがやたら重たくてtopコマンドを打ってみるとapacheのプロセスが溜まりまくりった際の対応メモ。

サーバーに置いているものはWPサイト3つ。アクセスは100pv行かないくらいの小規模なもの。
それと自分のためのphpで作られたツール2つ。

さて、本題ですが、apacheのエラーログを覗いてみる。
[error] server reached MaxClients setting, consider raising the MaxClients setting

という文字が。ぐぐってみると、同時接続数を上げる必要があるみたい。ただ設定する際の最適値がわからず。追求の必要ありですね。パラメーター値は以下のとおり。

先発ブログを見た感じ、同時接続256とかもあったりして結構行けるのかもしれない。
私のサーバーではそれぞれ10だったのでかなり先発ブログの方と開きがあるので取り敢えず64にしてみる。
一応解決。

前述の最適値を調べて見る必要があるために、今回はここまで。

【自分用メモ】CentOSの時刻を日本時間に

まずは確認を

cat /etc/sysconfig/clock
何も見つかりませんとのこと^^
デフォだとファイル自体ないんですね、了解しましたわ

vim /etc/sysconfig/clock
以下を挿入
ZONE=”Asia/Tokyo”
UTC=false

保存して終了させる
そしてlnコマンドで紐付けして
ln -s -f /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

うぃ終了!

dateコマンドで現在時刻を確認して終了。

時間がないのでこういう単発のものをひょこっと更新したくなりましたよん

FTPの設定

【20141124〜20141127の動画を元に作成】
結論から先に言おう。

FTPの設定にはホワイトリスト方式とブラックリスト方式がある模様。
そりゃサイトごとに説明が違うわけだw
バージョンが違うのかなと、vsftpのバージョン推移を確認したり、CentOSのバージョンを確認したり、
かなり回り道しました。どうみても僕の勉強不足です。本当にありがとうございましたw

# yum -y install vsftpd
いわずもがなインスコ
# service vsftpd start
vsftpd 用の vsftpd を起動中: [ OK ]
起動
# chkconfig vsftpd on

# chkconfig –list vsftpd
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
起動レベルの確認

# vim /etc/vsftpd/vsftpd.conf
anonymousユーザ(匿名ユーザ)の接続を禁止する
anonymous_enable=NO

アスキーモードでの転送を許可する
ascii_upload_enable=YES ←コメントアウトを解除
ascii_download_enable=YES←コメントアウトを解除

タイムスタンプ時間を日本時間に合わせる
local_enable=YES

書込み(アップロード、削除等)を認めるかの設定。
認めるのでコメントを外し有効にする。もちろん!
write_enable=YES

ユーザー以外には書込み権を与えないかつ読込み権は与えるのでコメントを外し有効にする。
local_umask=022

welcomeメッセージを表示するか?余計な機能は付けない@初心者ですから
dirmessage_enable=NO

ログの設定。ログよみはしたことないが心配症のためYES
下段はログの形式。デフォのままで良いのでこめんとのまま
xferlog_enable=YES
#xferlog_std_format=YES

20番ポートに接続しますが良いか?
connect_from_port_20=YESorNO

匿名でのアップを誰のものにするか。そもそもアニノマスには許可してないですし。
#chown_uploads=YES

冒頭のchはチェンジの意味。
YESだとユーザのログインディレクトリを、そのユーザのルートディレクトリに変更 (chroot) するかどうか。ユーザはログイン ディレクトリの外側にアクセスできなくなる。
ただし chroot_list_enable が YES の場合、リストアップされたユーザはその対象から除外される。
NOだとユーザはログイン ディレクトリの上部にも自由にアクセス可能。 (デフォルト)
ただし chroot_list_enable が YES の場合、リストアップされたユーザ(*3) のルート ディレクトリはログイン ディレクトリに変更 (chroot) される。
セキュリティを考慮すると、本ディレクティブを追加し YES と設定することが望ましい。
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=場所

一括ダウンロートアップロードはいかがしましょ的な
ls_recurse_enable=YES

windowsでいうスタートアップにしますか?はいいいえ。
listen=YES

ユーザー側のタイムスタンプを使うかどうか
use_localtime=YES

このへんは正直正しく理解できていない。
pasv_min_port=*****
pasv_max_port=*****

ドットで始まるファイルの設定についてYESで表示
force_dot_files=YES

設定したユーザーのみ接続可能ここですよ、ココ。
本当に苦労しましたww結局はホワイトリスト方式を取っており、userlist_fileに書かれたユーザーのみ接続可能。
userlist_enable=YES
userlist_deny=NO
userlist_file=場所

vim終了
ESC:wq

# service vsftpd restart

もうね、本当にネットにある情報は断片的で役に立たないと痛感させられました。
何か新しいことをするときにはネットには極力頼らない。もしも頼るとすれば、本当に当てになるサイトを
舐めるように精読してから実行すべし。そう肝に銘じた設定でした。

【今後の課題】
複数ユーザーが接続をすることを想定する場合にはもう一度chroot設定関連を詰める必要がある。

以下のサイトを見つけてからはかなり捗りました。ジャンピング土下座でお礼を申し上げます。
FTPサーバ(vsftpd)の構築(RedHat系編)
http://www.aconus.com/~oyaji/ftp/vsftpd_rpm.htm

自分用メモ_サーバー環境構築編

100%自分用メモw
【20141126_2118の動画を下に作成】

自分用メモなので体裁や見やすさは気にしていない。
自分で見返した時に芋づる式に記憶を呼び起こせればいいのでこれで満足。

日頃は巷であふれている情報を元に、ubuntuやcentosをVMに入れて環境構築

今回は初めてfc2vpsで構築したのでその時の画面の動画キャプチャを見ながらまとめた。
ssh接続後、

#yum update
#yum install

ここで筆休め。復習作業はモチベがすぐ下がるw