Memo

メモ > サーバ > 各論: トラブル対応例

■調査に役立つページ
ドメイン/IPアドレス サーチ 【whois情報検索】 https://www.cman.jp/network/support/ip.html KEIROMICHI | IPアドレスから住所検索 http://keiromichi.com/ IPひろば:メイン https://www.iphiroba.jp/ Downdetector https://downdetector.jp/ Check server: Check host - online website monitoring https://check-host.net/ ■AWS AWS Service Health Dashboard (東京リージョンは「Asia Pacific」タブ) https://status.aws.amazon.com/ ■さくら メンテナンス・障害情報 - さくらのサポート情報 https://help.sakura.ad.jp/maintenance/ ■ムームードメイン インフォメーション | ムームードメイン https://muumuu-domain.com/?mode=info ■その他 ・大規模障害の場合、Twitterを検索すると同じ状態になっている人が見つかるかもしれない
■他社サーバのトラブル調査を依頼されたとき
他社が立てたサーバで、トラブルがあった時だけ有償対応するのは危険。対応は慎重に検討する 自分で立てたサーバなら監視ツールなども入れるし継続的に監視もできるが、 他社が立てたサーバの場合、それらが何も無いことがある また、想定外のツールが仕込まれていて、それがもとでトラブルになった場合の対応が難しい サーバの設定を変更した場合その後継続的な監視も必要なので、1日2日で完了するものでは無い 一般に「サーバの監視を継続的に行う」という仕事が成立している以上、 一時的な対応で簡単に対応できるとは考えないほうがいい 「何かトラブルがあったときだけ対応」という以来は避けたほうが賢明
■サーバが重い・サーバに繋がらない 1
まずはサーバ会社の障害情報を確認する (上位回線に攻撃があった場合、Zabbixなどでは感知できない。) 次にZabbixなどで、外部からの大量リクエストによって重くなっているのか、そうでないのかを確認する リクエストによって重くなっている場合、そのリクエストの詳細を調べて、必要なら遮断するなどする 内部で問題が起こっている場合、該当プログラムを探す。 (以下の「サーバが重い・サーバに繋がらない」「Webページにアクセスできない」の具体例を参照) 原因が不明な場合、サーバーの再起動が有効な場合がある
■サーバが重い・サーバに繋がらない 2
サーバに繋がらないという連絡 Zabbixで「Too many processes on {HOSTNAME}」の項目を確認すると、プロセス数が300を超えていた。 topコマンドで確認すると、MySQLの負荷が異常に高い MySQLのスロークエリを確認すると、以下のSQLなど複数のクエリで長時間ロックされていた。
# Time: 150911 19:11:57 # User@Host: refirio[refirio] @ localhost [] # Query_time: 1412.046061 Lock_time: 706.623757 Rows_sent: 1 Rows_examined: 1756 SET timestamp=1441966317; SELECT COUNT(*) as cnt FROM w_delivery_call_header target WHERE EXISTS(SELECT * FROM w_delivery_call_list dl 以下略
MySQL方面からは、これ以上のことは判らず。 引き続き原因調査のため、SSHでログインしてしばらく操作していると、以下のメッセージが表示された。
Message from syslogd@refirio1 at Sep 11 20:34:02 ... kernel:Uhhuh. NMI received for unknown reason 21 on CPU 0. Message from syslogd@refirio1 at Sep 11 20:34:02 ... kernel:Do you have a strange power saving mode enabled? Message from syslogd@refirio1 at Sep 11 20:34:02 ... kernel:Dazed and confused, but trying to continue
エラーメッセージでググる。 OSが認識していない理由コードでNMIが発生したというメッセージ http://japan.zdnet.com/article/20367195/ Dazed and confused, but trying to cont... http://ossmpedia.org/messages/linux/2.6.9-34.EL/58911.ja 「実際の報告事例としては相性も含めてメモリカードの不具合が一番多い。」 誰も教えてくれなかったMySQLの障害解析方法 http://qiita.com/muran001/items/14f19959d4723ffc29cc ハードウェアの故障やメモリの容量不足によっても、スロークエリは発生するみたい ハードの問題の可能性が高いため、サブ機に切り替えて様子見。 その後、IPが変化したり、Zabbixの監視対象から外れていないか確認。 SSHアクセス、HTTPアクセス、バックアップの仕組みが動いているか、など諸々の動作確認を行う。 さくらに連絡 マザーボードの問題らしい 載せ替えて対応してくれるらしいが、ネットワークカードのMacアドレスが変わる よってサーバ内の設定調整が必要になるが、Macアドレスを使うアプリケーションは走らせていないので問題無いと思われる (Macアドレスでライセンス認証を行うものがあるので注意。)
■サーバが重い・サーバに繋がらない 3
ブラウザから見て画面が表示されないという連絡 topで確認すると、MySQLのプロセス1つがCPU使用率100%になっていた Zabbixで確認すると全体の25%を使用している CPUのコア数は4なので、CPUを1つ使い切っている。重い処理が1つ走った可能性がある また、ロードアベレージも1〜3程度まで上昇し、メモリもfreeが普段の半分くらいになっている スロークエリを確認(ファイルに記録している場合。以下の場所は一例)
# vi /var/log/slow.log # vi /var/lib/mysql/mysql-slow.log
ログが見当たらない場合、/etc/my.cnf の設定を確認するか、ファイルを検索する
# find / -name mysql-slow.log /home/www/html/logs/mysqld/mysql-slow.log /home/www/html/logs/mysql-slow.log /home/admin/mysql-slow.log # vi /home/www/html/logs/mysqld/mysql-slow.log
スロークエリを確認(データベースに記録している場合)
SELECT * FROM mysql.slow_log;
以下のクエリが実行された以降、重くなった?
# Time: 160205 10:17:08 # User@Host: refirio[refirio] @ localhost [] # Query_time: 2427.133555 Lock_time: 0.000157 Rows_sent: 0 Rows_examined: 9586647062 SET timestamp=1454635028; CREATE TEMPORARY TABLE `dataC6` (INDEX(owner_cd)) SELECT Q.owner_cd, Q.wms_section_cd, COUNT(Q.arrival_no) AS 'cntWork', SUM(Q.list_sum) as cntWorkd FROM (SELECT mag.area_group, mag.area_group_name, mo.owner_name, ah.owner_cd, ah.wms_section_cd, ah.arrival_no, ah.regist_date, ah.reserve_date, SUBSTRING(ah.regist_date,1,10) AS date , GET_SUM_ITEM_NUM_BY_ARRIVAL_LIST(ah.arrival_no) AS 'list_sum' FROM w_arrival_reserve_list ah LEFT JOIN m_owner mo ON ah.owner_cd = mo.owner_cd LEFT JOIN m_area ma ON mo.area_cd = ma.area_cd LEFT JOIN m_area_group mag ON ma.area_group = mag.area_group WHERE ah.regist_date between '2011-01-01 00:00:00' and '2016-02-05 23:59:59' AND not exists(select 1 from w_arrival_result ar where ah.arrival_no = ar.arrival_no) AND ah.csv_status<>'0' AND mo.area_cd IN (SELECT m_area.area_cd as area_cd FROM m_area WHERE m_area.area_group = 32 ) GROUP BY ah.arrival_no ) Q GROUP BY Q.area_group ASC, Q.owner_cd ASC;
また、以下の様な処理が何度もスロークエリに記録されている
SELECT COUNT(*) as cnt FROM w_delivery_call_list target INNER JOIN w_delivery_call_header dh ON target.delivery_no = dh.delivery_no AND target.owner_cd = dh.owner_cd INNER JOIN m_owner_wms_section ow ON target.owner_cd = ow.owner_cd AND target.wms_section_cd = ow.wms_section_cd WHERE ow.area_cd = 'HN1' AND target.ignore_flg <> '1' AND NOT EXISTS(SELECT * FROM w_delivery_call_list dl INNER JOIN t_item ti ON dl.owner_cd = ti.owner_cd AND dl.wms_section_cd = ti.wms_section_cd AND dl.wms_item_cd = ti.wms_item_cd INNER JOIN m_owner_wms_section ow ON dl.owner_cd = ow.owner_cd AND dl.wms_section_cd = ow.wms_section_cd WHERE dl.stockout_flg = '1' AND dl.picking_flg = '1' AND dl.delivery_no = target.delivery_no AND (ti.uninventory_flg <> '1' AND ti.uninventory_flg <> '3') AND ow.area_cd = 'HN1')AND dh.shipment_start_date <= DATE_ADD(CURDATE(), INTERVAL 10 DAY) + 0 AND target.csv_status = 0;
ログイン時、もしくはダッシュボードで常に重い処理が走っているみたい 普段から重いが、MySQLが重くなると致命的になる? プログラム側の改修が必要の可能性あり 以下のSQLで、60秒より長く実行され続けているクエリを探すこともできる
SELECT * FROM information_schema.PROCESSLIST WHERE TIME > 60;
■サーバが重い・サーバに繋がらない 4
CloudWatchを確認すると、RDSのCPU使用率が60%ほどに達していた AWSのコンソールからスロークエリログをダウンロードして確認 (テーブルに記録している場合、SQLでスロークエリログを確認する)
select * from `sh_headers` where `unit_id` = '32' and `sh_headers`.`no` = '4452013' and `dlv_nt_no` = '4452013' limit 1;
のような、検索のスロークエリログが大量に記録されている このクエリをNavicatで実行すると1.112秒かかる。7秒以上かかるときもある。遅い 使用していたRDSは db.t2.large。t2系なので、CPUクレジットを確認すると枯渇していた CPUCreditBalanceで残高、CPUCreditUsageで使用状況を確認できる (監視対象に入れていなかったが、これも監視対象に入れておくと良い。その他、AWSならではな監視項目があるかもなので、ひととおり確認する) CPU クレジット - T2 インスタンス - Amazon Elastic Compute Cloud http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/t2-instances.html#t2-instances-cpu-credits 引き続き、CPUクレジットを消費した原因を調査 MySQLの以下のコマンドでプロセスを確認すると、ゾンビプロセスがいた
SHOW PROCESSLIST;
処理時間が非常に長いのでKILLした(らしい) すぐにRDSのCPU使用率が下がり始めた 直接の原因は最近行った改修内容と思われる 改修以降にCPU負荷が高くなったため、該当箇所を再調整して様子を見る
■サーバが重い・サーバに繋がらない 5
Apacheのログに
# tail -n 10 /var/log/httpd/error_log [Tue Jun 21 09:54:56 2016] [notice] child pid 26477 exit signal Segmentation fault (11) [Tue Jun 21 09:54:56 2016] [notice] child pid 26514 exit signal Segmentation fault (11) [Tue Jun 21 09:54:56 2016] [notice] child pid 646 exit signal Segmentation fault (11) [Tue Jun 21 09:55:07 2016] [notice] child pid 647 exit signal Segmentation fault (11) [Tue Jun 21 09:55:07 2016] [notice] child pid 648 exit signal Segmentation fault (11) [Tue Jun 21 09:55:07 2016] [notice] child pid 649 exit signal Segmentation fault (11) [Tue Jun 21 09:55:07 2016] [notice] child pid 650 exit signal Segmentation fault (11) [Tue Jun 21 09:55:07 2016] [notice] child pid 651 exit signal Segmentation fault (11) [Tue Jun 21 09:55:07 2016] [notice] child pid 652 exit signal Segmentation fault (11) [Tue Jun 21 09:56:22 2016] [notice] child pid 654 exit signal Segmentation fault (11)
のように出力されている場合、セグメンテーション違反が発生している セグメンテーション違反は、 ・プログラムの不具合で、大量のメモリを消費した ・C/C++などで作成されたプログラムが、mallocで確保した領域の外など参照してはいけない領域のメモリを参照してしまった ときなどに発生する このとき、psの結果は以下のようになっていた ApacheがCPUをまったく消費していない(動作していない)
# ps aux | grep httpd apache 15313 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15314 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15315 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15316 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15317 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15318 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15319 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15320 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15321 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15322 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15323 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd apache 15324 0.0 0.5 63360 5188 ? S 10:46 0:00 /usr/sbin/httpd root 15393 0.0 0.0 5096 784 pts/0 S+ 10:47 0:00 grep httpd root 30158 0.0 1.1 63360 11660 ? Ss Dec16 0:00 /usr/sbin/httpd
Apacheを再起動するとCPUが消費されるようになり、 「Segmentation fault」もなくなり、Webページにアクセスできるようになった
# service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ] [root@zabbix ~]# ps aux | grep httpd root 15408 1.8 0.9 62840 10184 ? Ss 10:47 0:00 /usr/sbin/httpd apache 15410 3.6 2.2 70728 23264 ? S 10:47 0:00 /usr/sbin/httpd apache 15411 0.0 0.7 63492 7764 ? S 10:47 0:00 /usr/sbin/httpd apache 15412 0.0 0.5 62972 5432 ? S 10:47 0:00 /usr/sbin/httpd apache 15413 0.6 1.2 64664 12996 ? S 10:47 0:00 /usr/sbin/httpd apache 15414 0.0 0.4 62972 4756 ? S 10:47 0:00 /usr/sbin/httpd apache 15415 0.0 0.4 62972 4756 ? S 10:47 0:00 /usr/sbin/httpd apache 15416 0.0 0.4 62972 4756 ? S 10:47 0:00 /usr/sbin/httpd apache 15417 0.0 0.4 62972 4756 ? S 10:47 0:00 /usr/sbin/httpd root 15419 0.0 0.0 5092 772 pts/0 S+ 10:47 0:00 grep httpd
プログラムの不具合なら、yum update で解決するかもしれない もしくは依存ライブラリを差し替えるなど 可能なら試す サーバの再起動で解決することもあるらしい 「再起動によって不正な状態にあったメモリが解消された」 「再起動によって十分なメモリが確保された」 ということかもしれない インフラエンジニアがSegmentation fault をなんとか治してみる http://sarface2012.hatenablog.com/entry/20101027 Cライブラリの問題などで発生することが多いようだが、 PHPで「不正なクラスを参照したために大量のメモリを消費された」場合など、 メモリ不足でも発生することがあるみたい CentOS6 + Apache + PHP で Segmentation fault http://d.hatena.ne.jp/pospome/20140420/1398016279
■サーバが重い・サーバに繋がらない 6
ZabbixとCloudWatchから、「CPUの空きが少なくなっている」と警告が来た。 その時間のps結果(記録する仕組みを構築してあった)を見ると
apache 7382 0.0 51.2 1415264 1051548 ? R 12:58 0:05 /usr/sbin/httpd
となっていた。 Apacheが51.2%のメモリを消費している。 その時間のApacheエラーログを確認すると
[Thu Jul 14 14:46:32 2016] [error] [client 10.0.1.78] PHP Fatal error: Allowed memory size of 1073741824 bytes exh austed (tried to allocate 7680 bytes) in /var/www/vhosts/common/libs/cores/basis.php on line 52
とあった。 Webアプリケーションから巨大なファイルアップロードをしようとして、エラーになったもの。
■サーバが重い・サーバに繋がらない 7
毎週日曜日になるとIOの数値が異常に上がり、サイトがダウンする 日曜日に何か特別な作業をしたりはしていない 該当日時の /var/log/messages を確認すると
ats-collection kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0 ats-collection kernel: httpd invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0 ats-collection kernel: miniserv.pl invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0, oom_score_adj=0
のようなログがあった。メモリ不足でMySQLやApacheが強制終了させられている また /var/log/httpd/error_log には大量の404エラーが、/var/log/messages にはSMTPへのauth failureが大量に記録されている ・外部からのアタックによりサーバがダウンしている ・平日はギリギリ稼働しているが、日曜日にアタックが多くなりダウンしている ・エラーログ読み書きのためにIOの数値が上がっている という可能性がある。対応としては ・固定IPからの攻撃ならブロックする ・SMTPが不要なサーバならポートを閉じる。他にも不要なポートが空いていれば閉じる ・サーバのスペックを上げる(メモリの増加) などがある
■サーバが重い・サーバに繋がらない 8
朝の10時過ぎから、某学校サーバにアクセスしづらい状態になった Zabbixで確認するとトラフィックが急激に増加していた。原因は10時から合格発表があったため SSHでサーバにログインし、sarコマンドでトラフィックをリアルタイムに監視。
$ sar -n DEV 1 20 | grep eth0 10時14分43秒 eth0 10560.20 11452.04 1266.93 11511.12 0.00 0.00 22.45 10時14分44秒 eth0 10537.76 11457.14 1323.67 11336.58 0.00 0.00 26.53 10時14分45秒 eth0 10716.00 11577.00 1326.23 11583.44 0.00 0.00 24.00 10時14分46秒 eth0 11122.22 11577.78 1388.56 11517.21 0.00 0.00 14.14 10時14分47秒 eth0 9507.07 11029.29 1178.79 12118.10 0.00 0.00 26.26 10時14分48秒 eth0 9288.89 11085.86 1173.10 12113.81 0.00 0.00 26.26 10時14分49秒 eth0 8996.00 10951.00 1156.57 11992.37 0.00 0.00 24.00 10時14分50秒 eth0 8947.47 10778.79 1080.09 12120.24 0.00 0.00 26.26 10時14分51秒 eth0 9882.83 11351.52 1254.92 11765.30 0.00 0.00 24.24 10時14分52秒 eth0 10688.78 11896.94 1401.18 11873.96 0.00 0.00 21.43 10時14分53秒 eth0 10903.06 11642.86 1416.27 11664.75 0.00 0.00 24.49 10時14分54秒 eth0 10866.67 11215.15 1355.76 11369.29 0.00 0.00 26.26 10時14分55秒 eth0 10964.29 11460.20 1376.89 11759.93 0.00 0.00 24.49 10時14分56秒 eth0 10537.00 11191.00 1280.03 11539.10 0.00 0.00 24.00 10時14分57秒 eth0 10692.00 11669.00 1355.28 11894.80 0.00 0.00 22.00 10時14分58秒 eth0 11584.69 12365.31 1534.60 12001.36 0.00 0.00 25.51 10時14分59秒 eth0 11228.28 12140.40 1450.51 11683.98 0.00 0.00 12.12 10時15分00秒 eth0 10805.05 11335.35 1351.23 11124.17 0.00 0.00 18.18 10時15分01秒 eth0 10600.00 11835.35 1392.09 11433.73 0.00 0.00 26.26 10時15分02秒 eth0 11733.33 12204.04 1514.41 11631.43 0.00 0.00 14.14 平均値: eth0 10506.42 11509.86 1328.58 11701.87 0.00 0.00 22.65
右から4番目の値が、1秒間あたりの送信キロバイト数。 コンテンツを表示させるため、最大で1秒間に 12,120 Kbytes(96,960 Kbits)のデータが送信された。 つまり、約95Mbpsの速度が出たことになる。計測したサーバの回線は ・アップリンク:100Mbps ・接続形態:100Base-TX ・ご利用帯域目安:10Mbps(優先制御回線) となっているので、十分な速度が出ていると判断できる。(目安10Mbps、最大100Mbps。) 回線の限界までデータが流れているため、表示が遅くなっている状態。 契約上保証されている10Mbpsどころか、回線の限界である100Mbpsの速度がでているため、 「30Mbps(優先制御回線)」の契約に変えても合格発表直後は回線が詰まると思われる。 合格発表直後30分程度でアクセスは落ち着くようなので、その間だけ遅いのを良しとするか否か。 良しとできないなら、さくらの契約的に対処は難しいので、コンテンツを軽くする必要があると思われる。
■サーバが重い・サーバに繋がらない 9
Zabbixからサーバについての警告 確認すると、突然ロードアベレージが上がっており、大量のトラフィックも記録されている CPUはuser(アプリケーション)によって大量に使用されている WordPressを使っているサイトだったので、大量アクセスが原因と思われる アクセスログを見ると、以下ようなアクセスが大量に記録されている ツールによるイタズラと思われる
# vi /var/log/httpd/access_log
10.2.0.253 - - [08/Sep/2017:15:27:27 +0900] "GET /course/tennis/blog/detail.php?id=7547 HTTP/1.1" 200 34005 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 340873 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:27 +0900] "GET /course/tennis/blog/detail.php?id=1402 HTTP/1.1" 200 34112 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 342551 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:27 +0900] "GET /course/tennis/blog/detail.php?id=7546 HTTP/1.1" 200 33267 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 327939 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:28 +0900] "GET /course/tennis/blog/detail.php?id=7545 HTTP/1.1" 200 33821 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 337142 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:28 +0900] "GET /course/tennis/blog/detail.php?id=7544 HTTP/1.1" 200 36823 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 381773 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:28 +0900] "GET /course/tennis/blog/detail.php?id=7543 HTTP/1.1" 200 33740 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 333276 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:29 +0900] "GET /course/tennis/blog/detail.php?id=7542 HTTP/1.1" 200 35198 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 352983 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:29 +0900] "GET /course/tennis/blog/detail.php?id=7541 HTTP/1.1" 200 33783 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 320295 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:30 +0900] "GET /course/tennis/blog/detail.php?id=7540 HTTP/1.1" 200 33501 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 327385 52.196.209.177 http 10.2.0.253 - - [08/Sep/2017:15:27:30 +0900] "GET /course/tennis/blog/detail.php?id=7539 HTTP/1.1" 200 33791 "http://www.example.com/course/tennis/blog/?paged=17" "Wget/1.14 (linux-gnu)" 334674 52.196.209.177 http
http://www.iphiroba.jp/ でIPアドレスを調べると以下の内容だった どこかの人がAWSに立てたEC2サーバと思われる IPアドレス: 52.196.209.177 ホスト名: ec2-52-196-209-177.ap-northeast-1.compute.amazonaws.com 国: 日本 都道府県: 東京 市区町村: 新宿区 ツールを名指しでアクセス制限してみた 即座に負荷が減った
# vi .htaccess
BrowserMatch "Wget/1.14 (linux-gnu)" bad_bot Order Allow,Deny Allow from all Deny from env=bad_bot
ロードバランサー環境でIP制限する方法などは Defense.txt を参考に
■サーバが重い・サーバに繋がらない 10
AWSのEC2インスタンス一覧で、「アラームのステータス」が「データなし」となった しばらくすると自動で復旧した (インスタンスを10台程度起動させていると、数ヶ月に一度(1台)くらいの頻度で起きるように思う) cat /var/log/messages で繋がらなくなった時間のログを確認。uptime でサーバの稼働時間も確認。 再起動された形跡があれば、以下の可能性が高い AWS Developer Forums: インスタンスが勝手に再起動される https://forums.aws.amazon.com/message.jspa?messageID=288044 ハードウェアの問題などでAWSがインスタンスを強制的に再起動することがある その際AWSから個別連絡は行われない。上記のページで 「ハードウェア障害が原因となって再起動が行われた場合に個別にご連絡を差し上げることは行っておりません。」 と回答されている 防ぐためには、マルチAZでの複数台構成にする必要がある (最低でも2台以上の構成にする必要があるが、1台になったときにアクセスが集中することを考えれば3〜4台以上にすることが好ましい) 計画停止の場合、15日前くらいにメールで通知されるので、メールは確認しておく 止まった時の /var/log/messages ファイルの内容は以下のとおり。
May 17 09:02:29 web1 clamd[2582]: SelfCheck: Database status OK. May 17 09:12:29 web1 clamd[2582]: SelfCheck: Database status OK. May 17 09:13:13 web1 init: serial (ttyS0) main process (2691) killed by TERM signal May 17 09:13:13 web1 init: tty (/dev/tty1) main process (2692) killed by TERM signal May 17 09:13:13 web1 init: tty (/dev/tty2) main process (2695) killed by TERM signal May 17 09:13:13 web1 init: tty (/dev/tty3) main process (2697) killed by TERM signal May 17 09:13:13 web1 init: tty (/dev/tty4) main process (2699) killed by TERM signal May 17 09:13:13 web1 init: tty (/dev/tty5) main process (2701) killed by TERM signal May 17 09:13:13 web1 init: tty (/dev/tty6) main process (2704) killed by TERM signal May 17 09:13:13 web1 init: plymouth-shutdown main process (12355) terminated with status 1 May 17 09:13:13 web1 init: splash-manager main process (12350) terminated with status 1 May 17 09:13:15 web1 clamd[2582]: Pid file removed. May 17 09:13:15 web1 clamd[2582]: --- Stopped at Tue May 17 09:13:15 2016 May 17 09:13:15 web1 clamd[2582]: Socket file removed. May 17 09:13:16 web1 ntpd[2301]: ntpd exiting on signal 15 May 17 09:13:16 web1 rpcbind: rpcbind terminating on signal. Restart with "rpcbind -w" May 17 09:13:16 web1 kernel: Kernel logging (proc) stopped. May 17 09:13:16 web1 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2124" x-info="http://www.rsyslog.com"] exiting on signal 15. May 17 15:07:51 web1 kernel: imklog 5.8.10, log source = /proc/kmsg started. May 17 15:07:51 web1 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2088" x-info="http://www.rsyslog.com"] start May 17 15:07:51 web1 kernel: [ 0.000000] Initializing cgroup subsys cpuset May 17 15:07:51 web1 kernel: [ 0.000000] Initializing cgroup subsys cpu May 17 15:07:51 web1 kernel: [ 0.000000] Initializing cgroup subsys cpuacct May 17 15:07:51 web1 kernel: [ 0.000000] Linux version 4.1.17-22.30.amzn1.x86_64 (mockbuild@gobi-build-60009) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Fri Feb 5 23:44:22 UTC 2016 May 17 15:07:51 web1 kernel: [ 0.000000] Command line: root=LABEL=/ console=ttyS0 LANG=ja_JP.UTF-8 KEYTABLE=us May 17 15:07:51 web1 kernel: [ 0.000000] e820: BIOS-provided physical RAM map: May 17 15:07:51 web1 kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009dfff] usable May 17 15:07:51 web1 kernel: [ 0.000000] BIOS-e820: [mem 0x000000000009e000-0x000000000009ffff] reserved May 17 15:07:51 web1 kernel: [ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved May 17 15:07:51 web1 kernel: [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007fffffff] usable May 17 15:07:51 web1 kernel: [ 0.000000] BIOS-e820: [mem 0x00000000fc000000-0x00000000ffffffff] reserved May 17 15:07:51 web1 kernel: [ 0.000000] NX (Execute Disable) protection: active May 17 15:07:51 web1 kernel: [ 0.000000] SMBIOS 2.4 present. May 17 15:07:51 web1 kernel: [ 0.000000] Hypervisor detected: Xen May 17 15:07:51 web1 kernel: [ 0.000000] Xen version 4.2. May 17 15:07:51 web1 kernel: [ 0.000000] Netfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated NICs.
ただしハードウェア障害対応の場合、事前事後の通知なくAWS側でインスタンスの再起動が行われる可能性がある その際上にあるように、AWSから個別連絡などはされないため、これがマルチAZを推奨する根拠の一つとなっている AWS Developer Forums: インスタンスが勝手に再起動される https://forums.aws.amazon.com/message.jspa?messageID=288044 「ハードウェア障害が原因となって再起動が行われた場合に個別にご連絡を差し上げることは行っておりません。」 それ以外には、以下のような可能性も考えられる http://www.harumaki.net/2015/01/06/aws-ec2-rhel6-error-ttys0-messages/ 対処方法と思わしき記事はあるが、1台のみでの発生だったので関係ないかも https://access.redhat.com/ja/node/1218334 OS自体の不具合の可能性がある? 諸々をupdateしてコールドリブート(完全に停止させてからの起動)をするといいかも
■サーバが重い・サーバに繋がらない 11
Zabbixからサーバについての警告 突然web1サーバが停止した。SSHでもHTTPでもアクセスできない コンソールからEC2を再起動してみたが反応なし 次に停止させてみたが、「stopping」のまま反応なし…だったが、20分程度経ってから停止した。 停止を実行した後に再度停止を実行すると、それは強制停止になるらしい。(その後、「強制停止」という選択肢が追加されたみたい?) 停止を確認後、起動させると問題なくアクセスできるようになった。 調べてみる限り、AWSではときどき発生しているらしい。 サーバが入っているハードに何らかの問題が起きて、それが原因で正しく動作しなくなることがあるらしい。 サーバを起動し直す(再起動ではなく、停止&開始)と物理的に別の場所にサーバが立ち上がるようで、一応はそれが定番の対応らしい。 サーバが停止しない場合、フォーラムでAWSに再起動を依頼する。 インスタンスのライフサイクル - Amazon Elastic Compute Cloud https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html#instance-launc... 「起動時に指定したインスタンスタイプによって、インスタンスのホストコンピュータのハードウェアが決定します。」 インスタンスのライフサイクル - Amazon Elastic Compute Cloud https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html#lifecycle-diff... 「停止/開始 (Amazon EBS-Backed インスタンスのみ) インスタンスは新しいホストコンピュータに移動されます (ただし、場合によっては、インスタンスが現在のホストに残ることもあります)。」 AWS EC2インスタンスの再起動と停止/起動の違い | ぼぶろぐ https://ameblo.jp/hackerbobchan/entry-12129315767.html 「EC2インスタンスの再起動と停止/起動では動作が異なります。 一番大きな違いはというと、停止/起動では、起動するホストコンピュータ(物理的な基盤)が 変わるということです。」 AWS Developer Forums: EC2インスタンスが停止できない。 ... https://forums.aws.amazon.com/thread.jspa?threadID=84070 以下、問題があったときの /var/log/messages だが、特に問題は見られない
Dec 7 20:19:00 web1 dhclient[2120]: DHCPREQUEST on eth0 to 10.0.0.1 port 67 (xid=0x2985c309) Dec 7 20:19:00 web1 dhclient[2120]: DHCPACK from 10.0.0.1 (xid=0x2985c309) Dec 7 20:19:02 web1 dhclient[2120]: bound to 10.0.0.129 -- renewal in 1421 seconds. Dec 7 20:19:02 web1 ec2net: [get_meta] Trying to get http://169.254.169.254/latest/meta-data/network/interfaces/macs/06:de:57:6b:b3:6d/local-ipv4s Dec 7 20:19:02 web1 ec2net: [rewrite_aliases] Rewriting aliases of eth0 Dec 7 20:42:43 web1 dhclient[2120]: DHCPREQUEST on eth0 to 10.0.0.1 port 67 (xid=0x2985c309) Dec 7 20:42:43 web1 dhclient[2120]: DHCPACK from 10.0.0.1 (xid=0x2985c309) Dec 7 20:42:45 web1 dhclient[2120]: bound to 10.0.0.129 -- renewal in 1634 seconds. Dec 7 20:42:45 web1 ec2net: [get_meta] Trying to get http://169.254.169.254/latest/meta-data/network/interfaces/macs/06:de:57:6b:b3:6d/local-ipv4s Dec 7 20:42:45 web1 ec2net: [rewrite_aliases] Rewriting aliases of eth0 Dec 7 21:22:25 web1 kernel: imklog 5.8.10, log source = /proc/kmsg started. Dec 7 21:22:25 web1 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2216" x-info="http://www.rsyslog.com"] start Dec 7 21:22:25 web1 kernel: [ 0.000000] Initializing cgroup subsys cpuset Dec 7 21:22:25 web1 kernel: [ 0.000000] Initializing cgroup subsys cpu Dec 7 21:22:25 web1 kernel: [ 0.000000] Initializing cgroup subsys cpuacct Dec 7 21:22:25 web1 kernel: [ 0.000000] Linux version 4.4.51-40.60.amzn1.x86_64 (mockbuild@gobi-build-64010) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Wed Mar 29 19:17:24 UTC 2017 以下起動ログ
なおハードウェア障害対応の場合、事前事後の通知なくAWS側でインスタンスの再起動が行われる可能性がある 詳細は「サーバが重い・サーバに繋がらない 10」を参照
■サーバが重い・サーバに繋がらない 12
ZabbixからCPU負荷が高いという警告があった Zabbixを確認すると、負荷が上がった時間で「Incomming traffic」が上がっている 大量アクセスがあったか、重い画像が表示されたかと予想 アクセスログファイル /var/log/httpd/access_log で該当時間のアクセスを調べると、 以下のようなアクセスが大量にある。sitemapxmlというツールらしい
10.2.1.125 - - [13/Oct/2017:17:16:50 +0900] "GET /course/tennis/blog/?paged=59 HTTP/1.1" 200 33374 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; sitemapxml.jp)" 1649868 219.94.192.62 http 10.2.1.125 - - [13/Oct/2017:17:16:50 +0900] "GET /course/tennis/blog/detail.php?id=13856 HTTP/1.1" 200 36560 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; sitemapxml.jp)" 1661806 219.94.192.62 http 10.2.1.125 - - [13/Oct/2017:17:16:50 +0900] "GET /course/tennis/blog/detail.php?id=13827 HTTP/1.1" 200 36207 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; sitemapxml.jp)" 1656114 219.94.192.62 http 10.2.1.125 - - [13/Oct/2017:17:16:50 +0900] "GET /course/tennis/blog/detail.php?id=13846 HTTP/1.1" 200 36508 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; sitemapxml.jp)" 1655430 219.94.192.62 http 10.2.1.125 - - [13/Oct/2017:17:16:50 +0900] "GET /course/tennis/blog/detail.php?id=13814 HTTP/1.1" 200 39387 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; sitemapxml.jp)" 1654808 219.94.192.62 http
サイト運営者に確認すると、「サイトマップ作成ツールを使いました」とのことなのでそれが原因。
■サーバが重い・サーバに繋がらない 13
サイトが突然503エラーになった AWSコンソールで確認すると、Webサーバが二台ともロードバランサーから外れていた WebサーバのCPU使用率やネットワークINは普段より多いものの、異常と言えるほどではない 10分ほど経つと自動で回復した 以下調査内容 RDSの状態を確認すると、15:50ごろから「DB接続(カウント)」がどんどん上がっている アプリケーション(Laravel)のログを確認すると、
Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction (SQL: update `stocks` set `deleted_at` = 2018-01-31 16:04:56, `updated_at` = 2018-01-31 16:04:56 where `stocks`.`deleted_at` is null and `id` = 469232)' in /var/www/w3package_v2/shared/vendor/laravel/framework/src/Illuminate/Database/Connection.php:624
と記録されている ・15:50ごろにロックが発生し ・RDS側で処理が詰まり ・16:04にようやくログとして記録された という状況だと思われる その間にもどんどんアクセスが来るので、nginxのアクセス数上限に達して503エラーが返された? それがもとでロードバランサーから外されてしまった? 設定ファイルでは以下のように設定されているので、「worker_processes * worker_connections」でnginxは1024の接続数を捌けるみたい /etc/nginx/nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; }
2台のWebサーバがダウンしたことにより、アクセス元が無くなってロックが解除されたか もともと10分程度ロックし続ける処理で、それが終わったからロックが解除されたか …だと思われる 根本解決は難しいが、いったん 「どうしても長く処理すべき処理以外は、タイムアウトの時間を短くする」 で対応できるか検討する ・ロックした状態でPHPからSELECTするとどんな挙動になるか ・500番台のエラーになるのか、200番台で処理を返せるのか ・ロックを検知して強制解除はできるのか などは要検証 MySQLのプロセス確認と強制終了の方法は、 Command.txt の「MySQLでプロセスを確認&強制終了」を参照 デッドロックおじさん戦記 - Mercari Engineering Blog http://tech.mercari.com/entry/2017/12/18/deadlock MySQLのデッドロックを意図的に発生させる http://linuxserver.jp/%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89/db/mysql/%E3%83%87%E3%83%83%E3%8... MySQLのデッドロックを解除 http://fukuchiharuki.me/wiki/index.php?MySQL/%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E8%A7%A3%E9%99%A4%... MySQLの障害解析方法。ロックについても触れられている https://qiita.com/muran001/items/14f19959d4723ffc29cc
■サーバが重い・サーバに繋がらない 14
auのAndroidスマートフォンからアクセスできないという問い合わせがあった 「ウイルスバスター for au」のようなソフトを入れられてるようで、その防御レベルを高に設定していると入れないらしい 「ウイルスバスター for au」簡易マニュアル https://www.au.com/content/dam/au-com/static/designs/extlib/pdf/mobile/service/smartphone/safety/vir... 上記にソフトのマニュアルがあり、P.8に規制対象のカテゴリがある 「高」にしているとかなりのサイトが規制対象になるため、「中」に設定してもらうように案内
■サーバが重い・サーバに繋がらない 15
7月6日10時ちょうどに、某学校サーバのプロセス数が急激に増えた ブラウザからアクセスしても、トップページが表示されない Zabbixで確認すると、ロードアベレージ・Network・プロセス数が、10時ちょうどに急激に上がっている SSHではアクセスできたので、直接ロードアベレージを確認
$ uptime 10:03:46 up 611 days, 13:40, 1 user, load average: 5.57, 5.47, 3.03
負荷はかなり高い プロセスを確認。httpdが大量にある(250行ほど表示された。通常なら100行ほどのサーバ)
$ ps aux | grep httpd apache 475 0.1 0.7 114792 66292 ? S 09:37 0:03 /usr/sbin/httpd apache 713 0.1 0.7 115132 65492 ? S 09:42 0:02 /usr/sbin/httpd apache 725 0.2 0.7 115140 66224 ? S 09:42 0:03 /usr/sbin/httpd apache 739 0.2 0.7 114668 66040 ? S 09:43 0:03 /usr/sbin/httpd apache 780 0.2 1.0 131952 83556 ? S 09:43 0:03 /usr/sbin/httpd 〜略〜 apache 1576 0.3 0.7 115000 65516 ? S 09:59 0:01 /usr/sbin/httpd admin 1831 0.0 0.0 5096 800 pts/0 S+ 10:06 0:00 grep httpd root 3916 0.0 0.7 110452 66000 ? Ss 2016 78:09 /usr/sbin/httpd apache 20691 0.0 0.6 101556 55276 ? S Jul01 0:00 /usr/sbin/httpd apache 32399 0.1 0.7 114692 66188 ? S 09:26 0:04 /usr/sbin/httpd
Apacheのアクセスログを確認 以下のようなログが大量に記録されている Apacheが処理を捌ききれなくなっていると思われる
# vi /var/log/httpd/access_log ::1 - - [06/Jul/2018:09:56:23 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.3 (Red Hat) (internal dummy connection)" ::1 - - [06/Jul/2018:09:56:24 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.3 (Red Hat) (internal dummy connection)" ::1 - - [06/Jul/2018:09:56:25 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.3 (Red Hat) (internal dummy connection)" ::1 - - [06/Jul/2018:09:56:26 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.3 (Red Hat) (internal dummy connection)" ::1 - - [06/Jul/2018:09:56:27 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.3 (Red Hat) (internal dummy connection)"
単純にアクセスが多すぎて捌ききれなくなった可能性が高い ロードアベレージは徐々に下がりつつあったのでしばらく様子を見ていると、HTTPDでアクセスできるようになった トップページに「重要なお知らせ」として以下が掲載されている 恐らく学校が「休講に関する情報はホームページで確認してください」のアナウンスを出し、 これを確認するためにアクセスが集中したと思われる - - - - - - - - - - - - - - - - - - - - 2018/07/06 7月6日(金)大雨に伴う終日全学一斉休講について 2018/07/05 【緊急のお知らせ】7月6日(金)大雨に伴う全学一斉休講について - - - - - - - - - - - - - - - - - - - -
■サーバが重い・サーバに繋がらない 16
サイトにアクセスできないと言われて調査 Zabbixで確認すると、ロードアベレージが急激に上がっている途中だった(最終的に100を超えた) 過去のps結果を確認すると、
# vi /var/log/command/ps_aux_sort_-pcpu/20180905/1512.log apache 6535 0.5 0.4 475216 8696 ? S 07:59 2:15 /usr/sbin/httpd apache 18726 0.5 0.3 477420 8128 ? D 13:15 0:40 /usr/sbin/httpd apache 20511 0.5 0.7 442212 15944 ? D 13:48 0:29 /usr/sbin/httpd apache 21320 0.5 0.7 461968 15056 ? D 14:06 0:24 /usr/sbin/httpd apache 21827 0.5 0.8 454400 17668 ? D 14:21 0:16 /usr/sbin/httpd
のようにhttpdのプロセスが100くらい並んでいる。つまりWebへのアクセスで何かあった可能性が高い HTTPでのアタックかと思ったが、ネットワークIN/OUTの量に異常は見当たらない
# vi /var/log/messages Sep 5 15:14:34 web1 kernel: [451236.293114] Out of memory: Kill process 12083 (httpd) score 12 or sacrifice child Sep 5 15:14:34 web1 kernel: [451236.299684] Killed process 12083 (httpd) total-vm:480824kB, anon-rss:15616kB, file-rss:0kB, shmem-rss:0kB Sep 5 15:15:30 web1 kernel: [451293.207429] httpd invoked oom-killer: gfp_mask=0x14201ca(GFP_HIGHUSER_MOVABLE|__GFP_COLD), nodemask=(null), order=0, oom_score_adj=0
OOM Killer が走っていることは確認できたが、それ以外に異常は見つけられない
# vi /var/log/httpd/access_log 10.2.0.226 - - [05/Sep/2018:15:01:55 +0900] "GET /blog/soccer/soccer/wp-content/uploads/2015/06/DSC07569-200x200.jpg HTTP/1.1" 404 25926 "http://www.example.com/blog/soccer/page/40/?page=21&PHPSESSID=e15f5c05ed41f265211894cac0e3b499" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 YJApp-IOS jp.co.yahoo.ipn.appli/4.11.4" 13080902 126.152.69.153 https 10.2.0.226 - - [05/Sep/2018:15:01:55 +0900] "GET /blog/soccer/soccer/wp-content/uploads/2015/06/DSC07562-200x200.jpg HTTP/1.1" 404 25926 "http://www.example.com/blog/soccer/page/40/?page=21&PHPSESSID=e15f5c05ed41f265211894cac0e3b499" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 YJApp-IOS jp.co.yahoo.ipn.appli/4.11.4" 13090592 126.152.69.153 https 10.2.0.226 - - [05/Sep/2018:15:01:55 +0900] "GET /blog/soccer/soccer/wp-content/uploads/2015/06/DSC07540-200x200.jpg HTTP/1.1" 404 25926 "http://www.example.com/blog/soccer/page/40/?page=21&PHPSESSID=e15f5c05ed41f265211894cac0e3b499" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 YJApp-IOS jp.co.yahoo.ipn.appli/4.11.4" 13113476 126.152.69.153 https
負荷が上がり始めたときのアクセスログを見ると、画像の404エラーが頻発している 画像エラーにしてはレスポンスタイムが異常に大きい そんなに巨大な画像があるのかと思って実際にアクセスすると、WordPressの画面が表示された 元記事にアクセスすると、壊れた画像がたくさん表示されている サイト構築者に確認すると、昔の記事は画像なしで記事だけ移植したらしい 画像が大量に掲載されたページにアクセスするとimgタグによってWordPressのページが呼び出され、WordPressへのアタックのような状況になっている (再現するか確認すると、ページによっては数回のリロードでロードアベレージが50くらいまで上がった) 対策としては、上記のようなURLにアクセスしたときにWordPressを経由しないようにすること また、壊れた画像が残っていること自体好ましくないので、過去の記事を整備すること なお上のことが原因の場合、SSHで操作できる程度の負荷なら
# service httpd restart
のみでも解消できる。ただしOOMKillerが走った後なら、念のためサーバを再起動しておく方が無難 SSHで接続できないほどに負荷が高い場合も、サーバを再起動する
■サーバが重い・サーバに繋がらない 17
WordPressを使ったサイトで、突然負荷が上がった 以下は負荷が上がったときのアクセスログ
10.2.1.134 - - [17/Oct/2018:20:35:29 +0900] "POST /blog/judo/wp-cron.php?doing_wp_cron=1539776129.0246760845184326171875 HTTP/1.1" 200 - "http://refirio.net/blog/judo/wp-cron.php?doing_wp_cron=1539776129.0246760845184326171875" "WordPress/4.7.3; https://refirio.net/blog/judo" 486263 52.199.66.64 http 10.2.0.208 - - [17/Oct/2018:20:35:28 +0900] "GET /course/judo/blog/?tag=%25E6%2595%25B4%25E5%25BD%25A2%25E5%25A4%2596%25E7%25A7%2591 HTTP/1.1" 200 44086 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 1139329 66.249.79.180 https 10.2.0.208 - - [17/Oct/2018:20:35:31 +0900] "GET /blog/baseball/feed/ HTTP/1.1" 200 48683 "-" "Faraday v0.12.2" 461680 52.198.102.10 http 10.2.1.134 - - [17/Oct/2018:20:35:31 +0900] "GET /blog/baseball/2018/09/12/%e6%97%a5%e6%9c%ac%e9%81%b8%e6%89%8b%e6%a8%a9%e3%80%80%e5%88%9d%e6%88%a6/ HTTP/1.1" 301 389 "-" "Faraday v0.12.2" 367 52.198.102.10 https 10.2.0.208 - - [17/Oct/2018:20:35:31 +0900] "GET /course/baseball/blog/detail.php?id=15683 HTTP/1.1" 200 53495 "-" "Faraday v0.12.2" 390600 52.198.102.10 https
日を改めて、負荷が上がった時間にやはり wp-cron.php が実行されている 「wp-cron.php が実行される=負荷が上がる」とは限らないようだが、以下は実行に非常に時間がかかっている(20秒以上)
10.2.1.134 - - [18/Oct/2018:07:39:25 +0900] "POST /blog/physical/wp-cron.php?doing_wp_cron=1539815964.4120430946350097656250 HTTP/1.1" 200 - "http://refirio.net/blog/physical/wp-cron.php?doing_wp_cron=1539815964.4120430946350097656250" "WordPress/4.7.3; https://refirio.net/blog/physical" 21809354 52.199.66.64 http::1 - - [18/Oct/2018:07:39:47 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache (internal dummy connection)" 235 - - 10.2.1.134 - - [18/Oct/2018:07:39:28 +0900] "POST /blog/softtennis/wp-cron.php?doing_wp_cron=1539815967.3206160068511962890625 HTTP/1.1" 200 - "http://refirio.net/blog/softtennis/wp-cron.php?doing_wp_cron=1539815967.3206160068511962890625" "WordPress/4.7.3; https://refirio.net/blog/softtennis" 19691582 52.199.66.64 http
wp-cron.php によって負荷が上がることがあるみたい WordPressのCron処理が不要なら、無効にしてみる wp-config.php の先頭に、以下のコードを追加すると無効になる
define('DISABLE_WP_CRON', 'true');
WordPressで定期的に処理をさせる!WP-Cronの設定方法 - 東京のホームページ制作 / WEB制作会社 BRISK https://b-risk.jp/blog/2017/09/wp_cron/ WordPress の wp-cron を無効にしたら劇的にパフォーマンスが改善した話 | あぱーブログ https://blog.apar.jp/web/7430/ wp-cron.phpを無効化して高速化される理由 | ハックノート https://hacknote.jp/archives/37075/
■サーバが重い・サーバに繋がらない 18
アプリケーションのログを調べると、ElastiCacheに接続できない旨のログが残っていた ElastiCacheのイベントを調べると、2019年2月8日金曜日 14時16分34秒 UTC+9に「Recovering cache nodes 0001」というログが残っていた (なおAmazon側で自動的にサービスが落ちたことを検知し、自動復旧している) Amazonに問い合わせた際の回答は以下のとおり 要約すると「ハードが良くない可能性が高いので、変更を推奨する」という回答
この度はお問い合わせ頂き、誠にありがとうございます。 >・突然、2日連続して再起動したのが気になるのですが、そちら側で、なにか原因的なものは判るでしょうか ご不便をお掛けし、申し訳ございません。 当該ノードが稼働している仮想サーバホストにおいて、断続的に短い時間の問題が生じていたことを確認致しました。 ElastiCache によって問題が検知され、ノードの置き換えが実施されましたが、いずれも短い時間の問題であったため、置き換えが完了する前にノードの正常性が戻っておりました。 対応としまして、お手数ではございますがノードの置き換えをご検討頂けないでしょうか。 当該ノードについては調査の上で対応を検討して参りますが、短い期間で何度も事象が発生しており、今後も同様の事象が発生する可能性がございます。 対応手順としては、クラスターにレプリカを追加し、プライマリへのフェイルオーバを行っていただけると、よろしいかと存じます。その他の手順としては、クラスターを削除して新規に作成する対応になってしまいますが、ご検討頂けますでしょうか。 以下、関連するドキュメントに説明や手順がございますので、ご案内いたします。後者については、テスト、との記載がございますが、実際にフェイルオーバさせることが可能でございますので、ご安心くださいませ。 - クラスターへのノードの追加 - Redis 用 Amazon ElastiCache https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/Clusters.AddNode.html - ダウンタイムの最小化: 自動フェイルオーバーでのマルチ AZ - Redis 用 Amazon ElastiCache https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/AutoFailover.html#auto-failover-te... >・当方ですが、Redisでセッション情報の管理を行っているため、こちらにアクセスできなくなるとサービスに支障が出るのですが、停止時間を短くするための構成はあるのでしょうか ベストプラクティスとしては、複数ノードによる自動フェイルオーバーの有効化をご案内させていただいております。 - 障害の軽減 - Redis 用 Amazon ElastiCache https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/FaultTolerance.html#FaultTolerance... (抜粋) 障害の影響を最小限に抑える ノードの障害の影響を最小限に抑えるために、各シャードに複数のノードを実装して、複数のアベイラビリティーゾーンにノードを分散することをお勧めします。 Redis を実行している場合は、レプリケーショングループでマルチ AZ を有効にして、プライマリノードで障害が発生すると ElastiCache が自動的にレプリカにフェイルオーバーを実行するようにしておくことをお勧めします。 また、より新しいバージョンにおけるバグ修正やパフォーマンスの安定性から考え、新しいエンジンバージョンを使っていただくことも、あわせてお勧め致します。 >Redisのパラメータグループを確認したところ、timeoutの設定値が「0」になっていましたが、このあたりの影響もあるのでしょうか いいえ、今回の事象につきましては、コネクション数の多寡によって発生したものではございませんでした。 また、アプリケーションによってコネクションが正しくハンドリングされていれば、タイムアウトに関する設定について、考慮頂く必要は無いと認識しております。 以下は Redis 公式のドキュメントであり、AWS が提供する資料ではございませんが、参考情報としてご覧くださいませ。 - Redis Clients Handling - Redis https://redis.io/topics/clients (抜粋) - Mission critical applications where a bug in the client software may saturate the Redis server with idle connections, causing service disruption. 他にご不明な点がございましたらお問い合わせ頂ければ幸いです。 どうぞよろしくお願いいたします。
■サーバが重い・サーバに繋がらない 19
突然EC2に一切繋がらなくなった AWSコンソールから確認しても「確認できない」となっている コンソールのアラート(上部メニューのベルマーク)から確認すると、以下の内容が表示されていた 最初に確認したときは「09:18 PM PDT」の内容のみだった
Network Connectivity [09:18 PM PDT] We are investigating connectivity issues affecting some instances in a single Availability Zone in the AP-NORTHEAST-1 Region. [09:47 PM PDT] We can confirm that some instances are impaired and some EBS volumes are experiencing degraded performance within a single Availability Zone in the AP-NORTHEAST-1 Region. Some EC2 APIs are also experiencing increased error rates and latencies. We are working to resolve the issue. [10:27 PM PDT] We have identified the root cause and are working toward recovery for the instance impairments and degraded EBS volume performance within a single Availability Zone in the AP-NORTHEAST-1 Region. [11:40 PM PDT] We are starting to see recovery for instance impairments and degraded EBS volume performance within a single Availability Zone in the AP-NORTHEAST-1 Region. We continue to work towards recovery for all affected instances and EBS volumes.
以下は和訳したもの
ネットワーク接続 [太平洋夏時間9:18 PM]AP-NORTHEAST-1領域の単一のアベイラビリティゾーン内の一部のインスタンスに影響を与える接続の問題を調査しています。 [太平洋夏時間9:47 PM]AP-NORTHEAST-1領域の単一のアベイラビリティゾーン内で、一部のインスタンスに障害が発生し、一部のEBSボリュームのパフォーマンスが低下していることを確認できます。EC2APIの中には、エラー率と遅延が増加するものもあります。問題の解決に努めています。 [太平洋夏時間10:27 PM]根本原因を特定し、AP-NORTHEAST-1領域の単一のアベイラビリティゾーン内でのインスタンス障害とEBSボリュームパフォーマンスの低下の回復に向けて作業しています。 [太平洋夏時間11:40 PM]AP-NORTHEAST-1領域の単一のアベイラビリティゾーン内での障害やEBSボリュームパフォーマンスの低下などの回復が見られ始めています。引き続き、影響を受けるすべてのインスタンスとEBSボリュームのリカバリに取り組んでいきます。
東京リージョンの Availability Zone 自体の障害らしく、AWSが調査中とのこと 非公式だが、ニュースも出ていた 日本時間2019年8月23日(金) 13:18:32 EC2 (東京) お知らせ ネットワーク接続性の問題 https://twitter.com/awsstatusjp/status/1164754914695770113?s=20 AWSで障害、スマホ決済「PayPay」などに影響 - Engadget 日本版 https://japanese.engadget.com/2019/08/23/aws/ AWSで大規模障害が発生中 『アズレン』で通信障害を報告 『アナデン』『ダンメモ』『シノアリス』『ガルパ』などにも影響【追記】 | Social Game Info https://gamebiz.jp/?p=246869 ■顛末 最終的に、コンソールのアラートには以下が表示されていた
インスタンスの接続性について | Instance Availability [09:18 PM PDT] We are investigating connectivity issues affecting some instances in a single Availability Zone in the AP-NORTHEAST-1 Region. [09:47 PM PDT] We can confirm that some instances are impaired and some EBS volumes are experiencing degraded performance within a single Availability Zone in the AP-NORTHEAST-1 Region. Some EC2 APIs are also experiencing increased error rates and latencies. We are working to resolve the issue. [10:27 PM PDT] We have identified the root cause and are working toward recovery for the instance impairments and degraded EBS volume performance within a single Availability Zone in the AP-NORTHEAST-1 Region. [11:40 PM PDT] We are starting to see recovery for instance impairments and degraded EBS volume performance within a single Availability Zone in the AP-NORTHEAST-1 Region. We continue to work towards recovery for all affected instances and EBS volumes. [01:54 AM PDT] Recovery is in progress for instance impairments and degraded EBS volume performance within a single Availability Zone in the AP-NORTHEAST-1 Region. We continue to work towards recovery for all affected instances and EBS volumes. [02:39 AM PDT] The majority of impaired EC2 instances and EBS volumes experiencing degraded performance have now recovered. We continue to work on recovery for the remaining EC2 instances and EBS volumes that are affected by this issue. This issue affects EC2 instances and EBS volumes in a single Availability Zone in the AP-NORTHEAST-1 region. [04:18 AM PDT] 日本時間 2019年8月23日 12:36 より、AP-NORTHEAST-1 の単一のアベイラビリティゾーンで、一定の割合の EC2 サーバのオーバーヒートが発生しました。この結果、当該アベイラビリティゾーンの EC2 インスタンス及び EBS ボリュームのパフォーマンスの劣化が発生しました。 このオーバーヒートは、影響を受けたアベイラビリティゾーン中の一部の冗長化された空調設備の管理システム障害が原因です。 日本時間 15:21 に冷却装置は復旧し、室温が通常状態に戻り始めました。温度が通常状態に戻ったことで、影響を受けたインスタンスの電源が回復しました。 日本時間 18:30 より大部分の EC2 インスタンスと EBS ボリュームは回復しました。 我々は残りの EC2 インスタンスと EBS ボリュームの回復に取り組んでいます。 少数の EC2 インスタンスと EBS ボリュームが電源が落ちたハードウェア ホスト上に残されています。 我々は影響をうけた全ての EC2 インスタンスと EBS ボリュームの回復のための作業を継続しています。 早期回復の為、可能な場合残された影響を受けている EC2 インスタンスと EBS ボリュームのリプレースを推奨します。 いくつかの影響をうけた EC2 インスタンスはお客様側での作業が必要になる可能性がある為、後ほどお客様個別にお知らせすることを予定しています。 詳細は <a href="https://aws.amazon.com/message/56489/">こちら</a> をご参照ください。追加のご質問がある場合は、<a href="https://aws.amazon.com/support">AWS サポート</a>までご連絡ください。
以下のサイトなどでも、原因について触れられている 空調設備の異常が原因で、マルチAZでの冗長構成でも防げなかったとのこと AWS障害、大部分の復旧完了 原因は「サーバの過熱」 - ITmedia NEWS https://www.itmedia.co.jp/news/articles/1908/23/news117.html AWS、東京リージョン23日午後の大規模障害について詳細を報告。冷却システムにバグ、フェイルセーフに失敗、手動操作に切り替えるも反応せず − Publickey https://www.publickey1.jp/blog/19/aws23.html AWS大障害、冗長構成でも障害あったと公式に認める | 日経 xTECH(クロステック) https://tech.nikkeibp.co.jp/atcl/nxt/news/18/05816/ AWS障害、“マルチAZ”なら大丈夫だったのか? インフラエンジニアたちはどう捉えたか、生の声で分かった「実情」 (1/3) - ITmedia NEWS https://www.itmedia.co.jp/news/articles/1908/28/news127.html
■サーバが重い・サーバに繋がらない 20
AWSのCloudWatchから、ALBについて「ALB UnHealthy Host Count」の警告が来た サイトも「504 Gateway Time-out」の表示になった
# ps aux | grep httpd
で確認すると、Apacheのプロセス数が300くらいになっていた。普段は10〜50程度
# systemctl restart php-fpm # systemctl restart httpd
でApacheを再起動しても変わらず ネットワークの障害が関係しているのかと思って同じVPC内にEC2を立ててApacheをインストールすると、問題なくアクセスできた 状況としては ・SSHでは問題なく接続できる ・ロードアベレージとCPU使用状況は普段どおり ・メモリは普段より使われているものの、稼働に問題があるとは思えない ・ディスク容量とinodeも普段どおり ・ネットワークの使用状況も普段どおり ・接続中のユーザ数は跳ね上がっている ・プロセスはApacheが大量に立ち上がっている ・HTTPDの接続数は跳ね上がっている ・Apacheのメモリ確保量は跳ね上がっている ・HTTPステータスは、「200 OK」が普段より非常に多いタイミングがある しばらく原因が判らなかったが、Apacheのアクセスログを確認すると、負荷が上がった時間帯から以下のようなログが大量に現れていた /var/log/httpd/access_log
148 Safari/604.1" 327 49.98.155.114 https any ::1 - - [24/Dec/2020:16:10:27 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.39 () (internal dummy connection)" 170 - - any ::1 - - [24/Dec/2020:16:10:28 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.39 () (internal dummy connection)" 168 - - any ::1 - - [24/Dec/2020:16:10:29 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.39 () (internal dummy connection)" 183 - - any ::1 - - [24/Dec/2020:16:10:30 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.39 () (internal dummy connection)" 167 - - any ::1 - - [24/Dec/2020:16:10:31 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.39 () (internal dummy connection)" 167 - - any ::1 - - [24/Dec/2020:16:10:32 +0900] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.39 () (internal dummy connection)" 163 - - any 216.144.247.78 - - [24/Dec/2020:16:10:34 +0900] "CONNECT www.pawmotorsport.com.au:443 HTTP/1.1" 200 21176 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0" 32694 - - any 136.175.9.211 - - [24/Dec/2020:16:10:34 +0900] "CONNECT www.pawmotorsport.com.au:443 HTTP/1.1" 200 21176 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36" 38492 - - any 136.175.9.57 - - [24/Dec/2020:16:10:47 +0900] "CONNECT www.pawmotorsport.com.au:443 HTTP/1.1" 200 21176 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" 34702 - - any 136.175.9.209 - - [24/Dec/2020:18:58:32 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "https://www.facebook.com" "Mozilla/5.0 (Linux; Android 4.4.2; GT-N5110 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Safari/537.36" 238096628 - - any 136.175.9.209 - - [24/Dec/2020:18:58:33 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "https://www.yahoo.com" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0" 238164924 - - any 136.175.9.209 - - [24/Dec/2020:18:58:33 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "" "Mozilla/5.0 (iPad; CPU OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4" 238740621 - - any 136.175.9.209 - - [24/Dec/2020:18:58:33 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36" 243895845 - - any 136.175.9.209 - - [24/Dec/2020:18:58:33 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:40.0) Gecko/20100101 Firefox/40.0" 246130485 - - any 136.175.9.209 - - [24/Dec/2020:18:58:33 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "https://www.gmail.com" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:34.0) Gecko/20100101 Firefox/34.0" 246415880 - - any 136.175.9.209 - - [24/Dec/2020:18:58:33 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "" "Mozilla/5.0 (Windows NT 6.0; rv:38.0) Gecko/20100101 Firefox/38.0" 246967450 - - any 136.175.9.209 - - [24/Dec/2020:18:58:33 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "https://www.yahoo.com" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36" 247372227 - - any 136.175.9.209 - - [24/Dec/2020:18:58:33 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36" 247609739 - - any 136.175.9.209 - - [24/Dec/2020:18:58:34 +0900] "CONNECT www.acenursing.org:443 HTTP/1.1" 504 247 "https://www.google.com" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36" 247921879 - - any
また、Apacheのエラーログを確認すると、負荷が挙がった時間帯から以下のようなログが現れていた /var/log/httpd/error_log
[Thu Dec 24 16:09:57.979458 2020] [proxy_fcgi:error] [pid 31611] (70007)The timeout specified has expired: [client 216.144.247.78:39728] AH01075: Error dispatching request to : (polling) [Thu Dec 24 16:10:00.948288 2020] [proxy_fcgi:error] [pid 32350] (70007)The timeout specified has expired: [client 136.175.9.211:41736] AH01075: Error dispatching request to : (polling), referer: https://www.baidu.com [Thu Dec 24 16:10:09.933879 2020] [proxy_fcgi:error] [pid 32455] (70007)The timeout specified has expired: [client 136.175.9.213:35128] AH01075: Error dispatching request to : (polling) [Thu Dec 24 16:10:18.089186 2020] [proxy_fcgi:error] [pid 32464] (70007)The timeout specified has expired: [client 64.31.35.10:40948] AH01075: Error dispatching request to : (polling) [Thu Dec 24 16:10:21.053775 2020] [proxy_fcgi:error] [pid 31686] (70007)The timeout specified has expired: [client 136.175.9.211:36960] AH01075: Error dispatching request to : (polling) [Thu Dec 24 16:10:58.806091 2020] [proxy_fcgi:error] [pid 32229] (70007)The timeout specified has expired: [client 216.144.247.78:46352] AH01075: Error dispatching request to : (polling) [Thu Dec 24 16:10:59.053005 2020] [proxy_fcgi:error] [pid 31618] (70007)The timeout specified has expired: [client 216.144.247.78:47300] AH01075: Error dispatching request to : (polling) [Thu Dec 24 16:11:01.567021 2020] [proxy_fcgi:error] [pid 32482] (70007)The timeout specified has expired: [client 216.144.247.78:55810] AH01075: Error dispatching request to : (polling) [Thu Dec 24 16:11:06.398091 2020] [proxy_fcgi:error] [pid 31860] (70007)The timeout specified has expired: [client 216.144.247.78:45130] AH01075: Error dispatching request to : (polling) [Thu Dec 24 16:11:06.830902 2020] [proxy_fcgi:error] [pid 32247] (70007)The timeout specified has expired: [client 216.144.247.78:46422] AH01075: Error dispatching request to : (polling) [Thu Dec 24 19:02:11.239968 2020] [proxy_fcgi:error] [pid 9096] (70007)The timeout specified has expired: [client 136.175.9.209:40102] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:11.239973 2020] [proxy_fcgi:error] [pid 9143] (70007)The timeout specified has expired: [client 136.175.9.209:41870] AH01075: Error dispatching request to :443: (polling), referer: https://www.baidu.com [Thu Dec 24 19:02:11.245293 2020] [proxy_fcgi:error] [pid 9149] (70007)The timeout specified has expired: [client 136.175.9.209:42220] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:12.243959 2020] [proxy_fcgi:error] [pid 9184] (70007)The timeout specified has expired: [client 136.175.9.209:42412] AH01075: Error dispatching request to :443: (polling), referer: https://www.google.com [Thu Dec 24 19:02:14.415915 2020] [proxy_fcgi:error] [pid 9190] (70007)The timeout specified has expired: [client 136.175.9.209:43746] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:15.306974 2020] [proxy_fcgi:error] [pid 9196] (70007)The timeout specified has expired: [client 136.175.9.209:45576] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:23.567014 2020] [proxy_fcgi:error] [pid 9198] (70007)The timeout specified has expired: [client 136.175.9.209:47104] AH01075: Error dispatching request to :443: (polling), referer: https://www.baidu.com [Thu Dec 24 19:02:27.618868 2020] [proxy_fcgi:error] [pid 9215] (70007)The timeout specified has expired: [client 136.175.9.209:49368] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:27.619120 2020] [proxy_fcgi:error] [pid 9208] (70007)The timeout specified has expired: [client 136.175.9.209:47952] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:29.017232 2020] [proxy_fcgi:error] [pid 9221] (70007)The timeout specified has expired: [client 136.175.9.209:52202] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:31.002278 2020] [proxy_fcgi:error] [pid 9210] (70007)The timeout specified has expired: [client 136.175.9.209:54108] AH01075: Error dispatching request to :443: (polling), referer: https://www.facebook.com [Thu Dec 24 19:02:32.073475 2020] [proxy_fcgi:error] [pid 9233] (70007)The timeout specified has expired: [client 136.175.9.209:44848] AH01075: Error dispatching request to :443: (polling), referer: https://www.yahoo.com [Thu Dec 24 19:02:32.650459 2020] [proxy_fcgi:error] [pid 9240] (70007)The timeout specified has expired: [client 136.175.9.209:46818] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:37.806771 2020] [proxy_fcgi:error] [pid 9242] (70007)The timeout specified has expired: [client 136.175.9.209:46950] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:40.042510 2020] [proxy_fcgi:error] [pid 9252] (70007)The timeout specified has expired: [client 136.175.9.209:47766] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:40.329017 2020] [proxy_fcgi:error] [pid 9232] (70007)The timeout specified has expired: [client 136.175.9.209:47984] AH01075: Error dispatching request to :443: (polling), referer: https://www.gmail.com [Thu Dec 24 19:02:40.880690 2020] [proxy_fcgi:error] [pid 9235] (70007)The timeout specified has expired: [client 136.175.9.209:49442] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:41.286272 2020] [proxy_fcgi:error] [pid 9255] (70007)The timeout specified has expired: [client 136.175.9.209:49864] AH01075: Error dispatching request to :443: (polling), referer: https://www.yahoo.com [Thu Dec 24 19:02:41.567903 2020] [proxy_fcgi:error] [pid 9247] (70007)The timeout specified has expired: [client 136.175.9.209:50212] AH01075: Error dispatching request to :443: (polling) [Thu Dec 24 19:02:42.837072 2020] [proxy_fcgi:error] [pid 9280] (70007)The timeout specified has expired: [client 136.175.9.209:51344] AH01075: Error dispatching request to :443: (polling), referer: https://www.google.com
136.175.9.209 の接続元を調べるとアメリカだった 攻撃と思われるので、ネットワークACLでこのIPに対して「すべてのトラフィック」を遮断した 復旧したが、またすぐに重くなった どこかで「このサイトを攻撃しよう」のようにして晒されている可能性があるかもしれない いったん、目についたいくつかのIPアドレスをアクセス制限対象にし、EC2を3台とも再起動すると復旧した それだけだとイタチごっこになる可能性があるので、Webサーバへの直接アクセス自体を遮断した つまり ・ロードバランサー経由でWebサーバへは、これまでどおりアクセスできる ・IPアドレスを指定してのWebサーバへの直接アクセスは禁止。ただしメンテナンスのため、自社のIPアドレスからなら許可 とした この状態で各Webサーバを再起動することで復旧した 今回のように「Webサーバへの直接アクセスを遮断する」という対応がしづらいため そもそも、ロードバランサーとWebサーバのセキュリティグループは別々にしておくべきではあった ■攻撃手法 うちのapacheにCONNECTとかいうリクエストが。 - Blanktar https://blanktar.jp/blog/2013/10/what-is-http-connect-request HTTPのCONNECTというのは、代理接続を要求するためのメソッド 今回のサーバを踏み台にした上で、他のサーバへ接続しようとしている ただし踏み台にしようとしたというより、アクセスできないサイトへの接続欲求を大量に送ることにより、サーバの負荷を上げようとしたものと思われる 詳細は引き続き要勉強
■サーバが重い・サーバに繋がらない 21
ZabbixからCPU負荷が高いという警告があった アクセスログファイル /var/log/httpd/access_log で該当時間のアクセスを調べると、 以下のようなログが大量に記録されていた
10.2.0.84 - - [01/Nov/2022:00:10:47 +0900] "GET /course/physical/ HTTP/1.1" 200 44883 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 1767367 173.252.83.118 https
Facebookのクローラーで、これが原因で負荷が高くなることはあるらしい これで解決: ログのfacebookexternalhitとは http://koredekaiketsu.blogspot.com/2015/05/facebookexternalhit.html facebookexternalhitについて - あんちょこメモ https://anchoko.floppy.jp/facebookexternalhit%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/ 以下によると、クローラーというよりプレビュー情報を取得するためのリクエストらしい LINEやSlackからも同じようなリクエストが来ることがあるらしい LINEやFacebookやSlackアプリでURLプレビュー時にサイトへ飛ぶリクエストのUserAgent - Qiita https://qiita.com/cacarrot/items/35caf00f90c05970a925
■ドメイン経由でサーバに繋がらない
ドメインの契約が切れていないか? ドメインやDNSの設定を変更していないか? などを確認する。それ以外に、以下のような原因も考えられる ■ネームサーバの障害 DoS攻撃によりネームサーバに障害が発生することがある メンテナンス・障害情報・機能追加|さくらインターネット公式サポートサイト https://support.sakura.ad.jp/mainte/mainteentry.php?id=20072 以下のようなページでニュースを確認する(契約サービスのニュースを確認する) 現在発生中の情報(12時間前後) - さくらのサポート情報 https://help.sakura.ad.jp/hc/ja/articles/206091882 ■ドメインの認証 規約の変更により、ドメインの認証が必要になることがある インフォメーション | ムームードメイン https://muumuu-domain.com/?mode=info&id=2927 以下のようなページでニュースを確認する(契約サービスのニュースを確認する) インフォメーション | ムームードメイン https://muumuu-domain.com/?mode=info 以下はclientHoldで停止されたときのwhoisの状態(上側) 大丈夫なときは「clientTransferProhibited」などと表示される(下側)
$ whois refirio.net | grep Status Domain Status: clientHold https://icann.org/epp#clientHold $ whois refirio.net | grep Status Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
【clientHoldとは?】ドメインが急に利用できなくなりました。 | よくある質問 | ムームードメイン https://muumuu-domain.com/?mode=faq&state=answer&id=000717 レジストラロックとはなんですか。 | 名づけてねっと https://faq.nttpc.co.jp/faq/show/1688?site_domain=nadukete
■SSHで認証できない 1
以下を確認する ・接続情報が正しいか ・IP制限など、何らかの制限を解除し忘れていないか ・ホームディレクトリのパーミッションが777になっていないか ・authorized_keysを読み込む権限があるか(鍵認証の場合) ・/var/log/secure にエラーメッセージが記録されていないか ■さくらVPS 設定ミスでVPSに入れなくなった場合、以下などを参考にする VNCコンソールを利用する - さくらのサポート情報 https://help.sakura.ad.jp/hc/ja/articles/206208001-VNC%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%... ■AWS 設定ミスでEC2に入れなくなった場合、以下などを参考にする パーミッション変更をミスってEC2に入れなくなった時の対処方法 - Qiita https://qiita.com/MikioSuematsu/items/7087be7d5cdec3e38a87 Amazon EC2 - Amazon EC2の設定ミスでrootになれなくなってしまった場合の対処法を教えてください|teratail https://teratail.com/questions/17102 Cloud-Init とユーザーデータを使用して追加 SSH ユーザーアカウントを追加する https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-user-account-cloud-init-user-data/ Amazon EC2起動時にユーザーデータで任意のSSHポートに変更する | DevelopersIO https://dev.classmethod.jp/server-side/os/how-to-change-ssh-default-port-using-user-data/ EC2のuser-dataで起動時shell scriptを書く - Qiita https://qiita.com/soeda_jp/items/495aedf4c097b7f822e1 user-dataはEC2の初回起動時にしか実行されないみたい? cloud-init の bootcmd なら再起動のたびに実行できるみたい? Amazon EC2 - Amazon EC2の設定ミスでrootになれなくなってしまった場合の対処法を教えてください|teratail https://teratail.com/questions/17102 ユーザーデータは、EC2の一覧から対象インスタンスを選択して 「アクション → インスタンスの設定 → ユーザーデータの表示/変更」 から編集できるようだが、実際の操作は要検証 以下、上記ページからの引用 マネジメントコンソールを使えるなら、インスタンスを停止した後、 ユーザーデータに下記のように入力してからインスタンスを起動すると、 cloud-init の bootcmd で sudoers を元に戻せないでしょうか。 bootcmd はインスタンスの最初の起動だけではなく、起動毎に毎回実行されるはずです。
#cloud-config bootcmd: - echo "ec2-user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/cloud-init
■SSHで認証できない 2
「突然SFTPで接続できなくなった」という連絡。ログを確認すると、以下のエラーが記録されている
# cat /var/log/secure Dec 19 10:46:45 web1 sshd[28546]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth] Dec 19 10:47:00 web1 sshd[28548]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth] Dec 19 10:47:06 web1 sshd[28550]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth] Dec 19 10:47:16 web1 sshd[28552]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth] Dec 19 10:47:27 web1 sshd[28554]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth] Dec 19 10:47:38 web1 sshd[28556]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth] Dec 19 10:53:03 web1 sshd[28592]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth] Dec 19 11:07:00 web1 sshd[28790]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth] Dec 19 13:19:08 web1 sshd[31606]: Received disconnect from 60.45.118.201: 11: do_connect error [preauth]
手元の環境で試すと認証でき、IP制限なども無い 原因不明だったが、接続側の設定ミスかもしれない 以下、解決したという内容のメッセージ 「一から再設定しましたら、接続できるようになりました。  恐らくどこかのタイミングでFTP設定欄の値を削ってしまったのかもしれません。」
■SSHで認証できない 3
何らかのトラブルで負荷が高くなりすぎて、SSHログインすらできなくなることがある 接続時、
ssh -v 203.0.113.1
のようにオプション v を付けるとデバッグ情報が表示される コントロールパネルなどからサーバを再起動できるなら試す
■特定のサービスが動作していない
psコマンドで起動しているか確認。起動していなければ起動させる
# ps aux | grep httpd
自動起動の設定を行っていない場合、OS再起動時に停止してしまうので確認する
# chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off … 2〜5が「on」になっていれば自動起動
自動起動に設定
# chkconfig httpd on
■アクセスログにHTTPステータスコード206が連続表示される
DoS攻撃とは限らないので注意。 HTTPステータスコード「206」について。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1192824606 ステータスコード206はバイトレンジリクエストなどと呼ばれているものです。 大きなバイナリデータを転送する際、全てではなく一部をキャッシュし、 再度アクセスする際に一部分だけをリクエストするという、チャンク通信の効率を上げるためのものです。 ですので、206がログに上がること自体はPDF参照においては正常な動作だと思います。
■topコマンドを使えない
Poderosaで発生。コマンドを実行すると
'kterm': unknown terminal type.
と表示される。xtermに切り替えると使える 原因不明だが、xtermが標準的なターミナルエミュレータなので普段からxtermにしておくと良さそう
■公開ディレクトリを変更できない
SELinuxが有効になっている場合、公開ディレクトリを変更しても変更前のページが表示され続ける SELinuxを無効にするか、SELinuxのパーミッションを設定する 【ざっくりと理解する】SELinuxとは? https://eng-entrance.com/linux-selinux
■Webページを書き換えられている
「ドメイン経由でサーバに繋がらない」を参照 問題なければ ・作業ミスで書き換えてしまっていないか? ・サーバに侵入されて書き換えられていないか? ・Webアプリケーションの管理画面に侵入されて書き換えられていないか? などを確認する
■SSLを設定しても「プライバシーが保護されません」などが表示される
中間証明書をインストールしていなかったり、正しくインストールできていない場合に表示されるみたい 「Androidでだけ警告が表示される」などがあるので、色々な環境で表示確認をしておく OS X でSSL証明書が壊れることがある。Yosemiteで発生することがあるみたい ブラウザにパスワードを記録したときに壊れることがあるらしい MacをOS X El CapitanにしたらApp StoreとかTwitterに繋がらなくなった時の解決方法 http://dev.classmethod.jp/etc/mac-os-x-el-capitan-app-store/
■SSLを設定しても「NET::ERR_SSL_OBSOLETE_VERSION」などが表示される
httpsでエラーが表示されるお客様へ - ATWインターネットサービス https://www.atw.jp/article/2020072701/ TLS1.2への対応が必要とある ただし調べてみるとTLS1.2に対応しており、 POODLE SSLv3.0 脆弱性問題にも対応していた
$ openssl s_client -connect refirio.net:443 -tls1_2 SSL-Session: Protocol : TLSv1.2 # cat /etc/httpd/conf.d/ssl.conf | grep SSLProtocol SSLProtocol all -SSLv2 -SSLv3
ただしIEからアクセスしてページのプロパティを確認すると、確かにTLSv1.0となっていた Apache での TLS1.0 と TLS1.1 の無効化と確認方法メモ | あぱーブログ https://blog.apar.jp/web/10025/ 「TLS1.2 を使うには OpenSSL が バージョン 1.0.1 以上であることが必要」とある OpenSSLのバージョンを確認し、最新版でなければ以下のようにアップデートする
# openssl version # yum list openssl # yum update openssl # service httpd restart
今回はこれで解決できた
■iPhoneでAWSのロードバランサーにSSLでアクセスできない
ALBにてSSLを有効にすると、iOS・macOSでのみ一部画像が読み込めなかったりそもそもページが表示されなかったりする Apache から出力された Upgrade header がプロキシ経由でブラウザに届くと、失敗したりコネクションを破棄したりしてしまうらしい 解決方法としては、Upgrade header を送らないようにすればいい EC2 → ロードバランサー → ロードバランサーを選択 説明タブの「属性」で「HTTP/2」が有効になっていたら無効にする AWS(Amazon Web Services) - iPhoneでAWS上のサイトが見れない|teratail https://teratail.com/questions/163592 iOS 11, macOS Hight Sierra で The operation couldn't be completed. Protocol error が出る場合の対処 - Qiita https://qiita.com/ameyamashiro/items/8d4be0f11ffe12472052
■nginxからPHPを起動できない
/var/log/nginx/error.log には以下のように記録されている
2019/11/11 19:52:34 [error] 19202#0: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 124.219.166.205, server: _, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "3.113.235.47"
/etc/nginx/nginx.conf の以下の部分で、最後の「;」を忘れていたことが原因だった nginxの設定ファイルに文法ミスが無いかよく確認する
index index.php index.html;
■PHPで Strict Standards: date() が表示される
タイムゾーンの設定が必要
date() It is not safe to rely on the systems timezone settings
date関数で”Asia/Tokyo・・”なんかのエラーが出る件:PHP5.1.0以降 http://www.res-system.com/weblog/item/563
■PHPで Warning: strtotime() が表示される
タイムゾーンの設定が必要 PHPで「Warning: strtotime()〜」のエラーが出た時 http://ivystar.jp/programming/php/php%E3%81%A7%E3%80%8Cwarning-strtotime%EF%BD%9E%E3%80%8D%E3%81%AE%...
■PHPで php.ini を編集しても反映されない
以下など他のファイルで値が上書きされていないか確認する
# vi /etc/httpd/conf.d/php.conf # vi /etc/php-fpm.d/www.conf
また php-fpm を導入している場合、httpd だけでなく php-fpm も再起動する
# service php-fpm restart # service httpd restart
nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する - Qiita https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc それでも駄目なら以下も確認する PHPでdate.timezoneを設定したのに反映されない時の対処法メモ(Macユーザー向け) - Qiita https://qiita.com/okame_qiita/items/93ed3e62f2d04fe1431a
■PHPでPOSTデータの内容が途切れる
PHP5.3.9以降では max_input_vars という設定が設けられており、入力データ数が多すぎる場合は自動的にデータがカットされる 初期値は1000なので、入力欄を1500個並べても、PHP側で受け取れるのは1000個まで。 以下は2000個まで受け取るための /etc/php.ini の設定例
max_input_vars = 2000
PHPのPOSTパラメータ数の上限トラップ - Qiita https://qiita.com/bami3/items/c23cd94a6e9297649610 max_input_vars対策にデータをまとめて送信 | refirio.org http://refirio.org/view/342
■PHPでファイルをアップロードできない / タイムアウトする
PHPの初期設定では2MBまでしか受け付けない。それ以上のサイズだと、ファイルを選択しなかったときと同じ扱いになる php.iniや.htaccessで、upload_max_filesizeとそれに関連する設定を変更する必要がある。 以下は php.ini での、10MBまでのアップロードを受け付けるための設定例
max_execution_time = 120 memory_limit = 256M post_max_size = 16M upload_max_filesize = 10M
以下は .htaccess での、10MBまでのアップロードを受け付けるための設定例
php_value max_execution_time 120 php_value memory_limit 256M php_value post_max_size 16M php_value upload_max_filesize 10M
PHPでファイルアップロードサイズの上限を変更 http://refirio.org/view/347 ■nginx Webサーバにnginxを使用している場合、「413 Request Entity Too Large」というエラーになる client_max_body_sizeの設定が必要
# vi /etc/nginx/nginx.conf
server { client_max_body_size 256M;
# service nginx reload
Nginx での 413 Request Entity Too Large エラーの対処法 - Qiita https://qiita.com/takecian/items/639deeae094466de6546 また先の手順で php.ini を編集した後、以下のように php-fpm を再起動する必要がある
# service php-fpm restart
■タイムアウト PHPのタイムアウト設定は、主に以下を確認する
# vi /etc/php.ini
max_input_time = 60 … ユーザからのアップロードを受け付ける秒数 max_execution_time = 600 … スクリプト実行時間
Apacheの場合は以下も設定する
# vi /etc/httpd/conf/httpd.conf
Timeout 60 … リクエストを受け取ってから処理完了までの待機時間
PHPでファイルをアップロードするときの設定 http://www.maidsphere.jp/archive/PHP%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%A2%... nginxの場合は以下も設定する
# vi /etc/nginx/nginx.conf
fastcgi_connect_timeout 60; fastcgi_read_timeout 60; fastcgi_send_timeout 60;
具体例としてphp-fpm+nginxの場合、以下のように設定すればタイムアウトが5分になるはず(要検証)
# vi /etc/nginx/nginx.conf
fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; keepalive_timeout 315;
# vi /etc/php-fpm.d/www.conf
request_terminate_timeout 300
設定したら、php-fpmとnginxを再起動する
# systemctl restart php-fpm # systemctl restart nginx
Nginx+PHP-FPMでタイムアウトを伸ばす - WP Advisor https://hacknote.jp/archives/2594/ nginx でupstream timed outエラーが発生した時の対処 | レンタルサーバー・自宅サーバー設定・構築のヒント https://server-setting.info/centos/nginx-upstream-timed-out.html AWSを使用している場合、ロードバランサーやCloudFrontの設定も必要 504 Gateway Time-out が出た際は Elastic Load Balancing の設定にも注意しよう - Qiita https://qiita.com/kotarella1110/items/169ddcef03983f5d64b2 ただしCloudFrontは、タイムアウトを60秒以上にする場合は申請が必要なので注意 いますぐ使う CloudFront - Qiita https://qiita.com/sasasin/items/0f0ec1a90af6295589f9 ディストリビューションを作成または更新する場合に指定する値 - Amazon CloudFront https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-spe... ■データベース アップロードファイルをデータベースに保存する場合、データベースの設定にも影響を受ける サーバのログファイルに
PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 7680 bytes)
というエラーがあったり、アップロード時に画面に
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
と表示されたりする場合、データベースの設定が原因の可能性がある。 MySQLの場合、max_allowed_packetの上限を上げればいい。 通常のMySQLならmy.cnfで設定、RDSならパラメータグループの編集で対応できる。 (パラメータグループの反映にはRDSの再起動が必要と紹介されているが、再起動しなくても反映された。) インポート時に「MySQL server has gone away」が発生したときの対処 http://company.nankikumano.jp/contents/tech_info/104/ Amazon RDS編〜大きなデータのインポート(MySQL server has gone awayが発生した時)編〜 http://recipe.kc-cloud.jp/archives/3963
■PHPから MySQLに接続できない
何故か php-mysql の再インストールで直った サーバをほとんど触っていない時に対処したものなので、今後発生した場合はきちんとした原因究明を推奨 CentOSにPDOインストールするメモ http://d.hatena.ne.jp/toytools/20070813
# yum install php-mysql # service httpd restart
■MySQLに接続しようとすると Unknown table engine 'InnoDB' と表示される
/etc/my.cnf を編集してMySQLを再起動した直後に発生した 特定のファイルを削除し、MySQLを再起動する必要がある 【MySQL】Unknown table engine ‘InnoDB’。 http://note.onichannn.net/archives/1799 innodb_log_file_size を変えたら ib_logfile* の削除が必要 http://qiita.com/phanect/items/1e09925ade0190d713ca
# rm /var/lib/mysql/ib_logfile* # service mysqld restart
■MySQLに接続しようとすると Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' と表示される
エラーが発生したままなら、MySQLの再起動を試す
$ sudo service mysqld restart $ sudo /etc/init.d/mysqld restart
それでも駄目なら、手動で mysql.sock を作るといいらしい(未検証)
$ sudo touch /var/lib/mysql/mysql.sock $ sudo chown mysql:mysql /var/lib/mysql/mysql.sock
MySqlのソケットエラーを解決する - Qiita https://qiita.com/kanohisa/items/564035efd74d9c75bdcb mysqlが起動できない(Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)) - Qiita https://qiita.com/carotene4035/items/e00076fe3990b9178cc0 ただし稼働中のサーバで、常にではなく時々発生しているものがある(すぐに自動で回復する) メモリ不足や同時接続数の問題で、たまたま mysql.sock を読み込めなかった…とかかも PHP - 【Mysql、PHP】mysql.sockが消えてしまう(105500)|teratail https://teratail.com/questions/105500 正しい接続をしなかった場合にも発生することがあるらしい MySQLがクラッシュした場合にもソケットファイルは削除されるらしい ディスク使用率が100%になった場合にも、この現象が発生することがある その場合、「ディスク容量が残り少ない」を参考に不要なデータを削除する ■エラーになってMySQLを再起動するまで回復されなかったときに調査した内容
# cat /var/log/command/uptime/20180817/1530.log 15:30:02 up 102 days, 3:08, 0 users, load average: 5.44, 3.00, 1.33
15:28前後にロードアベレージが急激に上がっている (シングルコアのサーバなのに、瞬間的に6近くまで上がっている / 過去のロードアベレージを記録する仕組みはあらかじめ構築してある)
# vi /var/log/messages Aug 17 15:28:12 aws-terraport kernel: [8824004.377690] Out of memory: Kill process 2908 (mysqld) score 146 or sacrifice child Aug 17 15:28:12 aws-terraport kernel: [8824004.381107] Killed process 2908 (mysqld) total-vm:1491044kB, anon-rss:12028kB, file-rss:0kB
メモリ不足になったようで、OOM Killer によりMySQLが強制終了させられている
# vi /var/log/mysqld.log 180817 15:28:13 mysqld_safe Number of processes running now: 0 180817 15:28:13 mysqld_safe mysqld restarted 180817 15:28:13 [Note] /usr/libexec/mysql55/mysqld (mysqld 5.5.52) starting as process 32053 ... 180817 15:28:13 [Note] Plugin 'FEDERATED' is disabled. 180817 15:28:13 InnoDB: The InnoDB memory heap is disabled 180817 15:28:13 InnoDB: Mutexes and rw_locks use GCC atomic builtins 180817 15:28:13 InnoDB: Compressed tables use zlib 1.2.8 180817 15:28:13 InnoDB: Using Linux native AIO 180817 15:28:13 InnoDB: Initializing buffer pool, size = 512.0MInnoDB: mmap(549453824 bytes) failed; errno 12 180817 15:28:13 InnoDB: Compressed tables use zlib 1.2.8 180817 15:28:13 InnoDB: Using Linux native AIO 180817 15:28:13 InnoDB: Initializing buffer pool, size = 512.0MInnoDB: mmap(549453824 bytes) failed; errno 12 180817 15:28:13 InnoDB: Completed initialization of buffer pool 180817 15:28:13 InnoDB: Fatal error: cannot allocate memory for the buffer pool 180817 15:28:13 [ERROR] Plugin 'InnoDB' init function returned error. 180817 15:28:13 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 180817 15:28:13 [ERROR] Unknown/unsupported storage engine: InnoDB 180817 15:28:13 [ERROR] Aborting 180817 15:28:13 [Note] /usr/libexec/mysql56/mysqld: Shutdown complete 180817 15:28:13 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
直後に、mysqld_safeがMySQLを再起動しようとしている が、「Fatal error: cannot allocate memory for the buffer pool」などがあるので、 メモリ不足で再起動に失敗し、そのままになっている 発生したサーバはAWSのEC2のmicroなので、単純に性能不足なのかもしれない PHPプログラムやMySQLのチューニングでいくらか改善できるかもしれない mysqldが落ちてた時の対応メモ - itochin2の日記(仮) http://itochin2.hatenablog.com/entry/2014/03/06/142225 mysqldとmysqld_safeの関係 | OpenGroove https://open-groove.net/mysql/mysqld-mysqldsafe/
■MySQLに接続しようとすると Lock wait timeout exceeded; try restarting transaction と表示される
トランザクションの途中で処理が終了してしまった際、 コミットもロールバックもされていないとロックを取得したまま処理が残ることがある 「SHOW PROCESSLIST」と「SHOW INNODB STATUS」でスレッドを調べ、「KILL」で終了させる transactionの途中でトランザクションが切れてしまった時にそのトランザクションを殺す方法 - Garbage in, gospel out http://libitte.hatenablog.jp/entry/20141129/1417254010 トランザクションを強制的に終了させる - HHeLiBeXの日記 正道編 https://hhelibex.hatenablog.jp/entry/20110329/1301421815 ロック待ちのタイムアウト時間の確認/設定 - Qiita https://qiita.com/snaka/items/bb8e6c6d76494d771bff なお、innodb_lock_wait_timeout の値を伸ばすことで対応するという方法もあるかもしれない が、あまり無闇に伸ばすのも良くないかもしれない デッドロックの発生率が高くなるらしい? 要検証
■MySQLで権限を付与しようとすると Access Denied や Incorrect usage of DB GRANT が表示される
環境によっては「ALL PRIVILEGES」で一括指定するとエラーになるので、必要なものを個別に指定する 特定データベースの全権限を持つユーザの作成(RDS for MySQL 5.6) - Qiita https://qiita.com/s-katsumata/items/0b87e5fafe8e706e9c86 [AWS]GRANT ALLできねぇええ!はぁ?の巻|RDS|MariaDB - TrippyBoyの愉快な日々 https://blog.trippyboy.com/2019/aws/rds/awsgrant-all%E3%81%A7%E3%81%8D%E3%81%AD%E3%81%87%E3%81%88%E3...
■MySQLでときどき MySQL server has gone away と表示される
・巨大なクエリを実行した ・サイズの大きいデータをインポートした ・接続がタイムアウトした、接続がクローズした のようなときに発生するみたい max_allowed_packet の値を大きくすると改善することがあるみたい
> show variables like 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 4194304 | +--------------------+---------+ ↓ > show variables like 'max_allowed_packet'; +--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 16777216 | +--------------------+----------+
上の対策で効果が無ければ、タイムアウトも長く調整してみる
> show global variables like 'wait_timeout'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wait_timeout | 900 | +---------------+-------+
MySQLのエラーと対策まとめ - Qiita https://qiita.com/RyutaKojima/items/3772d695db5e2342ab47 インポート時に「MySQL server has gone away」が発生したときの対処 | 南紀熊野ウェブサービス(大阪、新宮市) http://company.nankikumano.jp/contents/tech_info/104/ mysql max_allowed_packetを変更する - Qiita https://qiita.com/_am_/items/91824da643256d46b847 MySQL に大きなデータを送る際に max_allowed_packet を確認した方がいい | Sun Limited Mt. http://blog.syuhari.jp/archives/1307 【MySQL】MySQLセッションタイムアウト(wait_timeout)の時間を変更する方法 - MEMO REC http://gontora.hatenadiary.com/entry/2018/08/02/121842 ■未検証 net_read_timeout や net_write_timeout の値も関係しているかもしれない(未検証)
> SHOW GLOBAL VARIABLES LIKE '%timeout%'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 3600 | | wait_timeout | 28800 | +-----------------------------+----------+ 12 rows in set (0.00 sec)
SELECT文をタイムアウト強制終了させる「MAX_EXECUTION_TIME」使ってる? - なからなLife http://atsuizo.hatenadiary.jp/entry/2017/12/09/000000 第75回 MySQLのさまざまなタイムアウトオプションについて:MySQL道普請便り|gihyo.jp … 技術評論社 https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0075
■MySQLにダンプデータを登録しようとすると「Row size too large (> 8126).」のエラーになる
XAMPP環境で発生 TEXT型やBLOB型のカラムが多いと、テーブル管理サイズを超えてしまうのでエラーになる…という現象みたい C:\xampp\mysql\bin\my.ini の最後に以下を追加したら、ダンプデータを登録できた
[mariadb] innodb_strict_mode=OFF
XAMPPでのinnodb_strict_mode=OFF設定 - Qiita https://qiita.com/sebon77_Gifu/items/3ac53be2578354231bfd ただし根本解決では無いみたい 以下を参考に、改めて検証したい 【MySQL5.6->5.7】 とてもたくさんの列をもったテーブルをつくりたい/Row size too large (> 8126)についてかんがえる - Qiita https://qiita.com/rhap/items/298cbd4b8e15a212df98
■MySQLにダンプデータを登録しようとすると「Got a packet bigger than 'max_allowed_packet' bytes」のエラーになる
XAMPP環境でMySQLにダンプデータを登録しようとしたとき、以下のエラーになることがあった C:\xampp\mysql\bin\mysql -u root -p test --default-character-set=binary < local_20220808.sql ERROR 1153 (08S01) at line 257: Got a packet bigger than 'max_allowed_packet' bytes 以下のように max_allowed_packet の値を増やすことで、登録できるようになった max_allowed_packet については、このファイル内の 「PHPでファイルをアップロードできない / タイムアウトする」 「MySQLでときどき MySQL server has gone away と表示される」 も参照
> SHOW VARIABLES LIKE 'max_allowed_packet' max_allowed_packet 1048576 > SET GLOBAL max_allowed_packet=16777216; > SHOW VARIABLES LIKE 'max_allowed_packet' max_allowed_packet 16777216
■MySQLのデータベース破損を修復
■mysqlcheckで修復 テーブルが壊れているかと思ったので、mysqlcheckで修復したときのメモ http://qiita.com/tachitechi/items/e8fd8f8fbf34a3bd884d
mysqlcheck -c -u root -p --all-databases … すべてのデータベースを確認 mysqlcheck -c test -u root -p … testデータベースを確認 mysqlcheck -a -u root -p --all-databases … すべてのデータベースを分析 mysqlcheck -a test -u root -p … testデータベースを分析 mysqlcheck -o -u root -p --all-databases … すべてのデータベースを最適化 mysqlcheck -o test -u root -p … testデータベースを最適化 mysqlcheck -r -u root -p --all-databases … すべてのデータベースを修復 mysqlcheck -r test -u root -p … testデータベースを修復
■SQLで修復
CHECK TABLE テーブル名; … 破損を確認 REPAIR TABLE テーブル名; … 破損していれば修復 CHECK TABLE テーブル名; … 再度確認
■MySQLで意図した値を参照できない
MySQLのトランザクション分離レベルはデフォルトで REPEATABLE READ となっていて、 この場合に意図しない挙動になることがある Programming.txt の「MySQLで意図した値を参照できない」を参照
■FTPソフトで時差が発生する
# vi /etc/vsftpd/vsftpd.conf
use_localtime=YES … 設定があればコメントアウトする
■FTPソフトで.htaccessが表示されない
# vi /etc/vsftpd/vsftpd.conf
force_dot_files=YES … 最後に設定を追加する
# service vsftpd restart
FileZillaなら、ソフトウェア側の設定で表示されることもある メニューの「サーバ → 強制的に隠しファイルを表示」にチェックを入れて試す
■rsyncでファイルが同期されない 1
lsyncdがエラーになっていないか、を確認する エラーになっていたら、エラーメッセージから原因を特定できるか、もしくは再起動で復旧するか、も確認する
# systemctl status lsyncd # systemctl restart lsyncd
基本的には、同期の設定は以下にあるので内容を確認する
# vi /etc/lsyncd.conf
■rsyncでファイルが同期されない 2
rsyncの設定ファイルである /etc/lsyncd.conf を確認すると
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.stat",
となっているので、ここにログファイルがある が、ログファイルディレクトリ /var/log/lsyncd/ 内を確認するも、1ヶ月ほど前から何も記録されていない rsync自動起動の設定を確認する
# systemctl list-unit-files -t service | grep sync lsyncd.service disabled rsyncd.service disabled rsyncd@.service static # chkconfig lsyncd on # systemctl list-unit-files -t service | grep sync lsyncd.service enabled rsyncd.service disabled rsyncd@.service static
確認すると、Web3でのみ lsyncd の自動起動が有効になっていなかったので有効にした (「static」は「他のユニットに依存する」という意味)
# uptime 12:16:48 up 33 days, 14:04, 2 users, load average: 0.07, 0.02, 0.00
1ヶ月ほど前に再起動したと思われるが、その際にrsyncが無効になった よってエラーログなども出力されなかった 対策としては、自動起動を忘れずに設定する…とするしか無いか もしくは
# ps aux | grep sync
を監視して、結果がゼロなら警告する仕組みを作るか CentOS7 systemctlコマンドの使い方 https://www.unix-power.net/networking/post-684
■rsyncでファイルが同期されない 3
rsyncのログを確認すると、以下が記録されていた
# cat /var/log/lsyncd/lsyncd.log Thu Jan 27 10:23:15 2022 Normal: --- Startup --- Thu Jan 27 10:23:15 2022 Error: Terminating since out of inotify watches. Consider increasing /proc/sys/fs/inotify/max_user_watches
Lsyncd が動かなくなった時 : プログラマー社長の「日々発見」 http://blog.livedoor.jp/kmiwa_project/archives/1072412621.html lsyncdが落ちる - Qiita https://qiita.com/miisuke/items/50493a57abe365afc5c0 監視するファイルの上限に引っかかったらしい 現在の設定を確認
# cat /proc/sys/fs/inotify/max_user_watches 8192
デフォルト値になっていたので、/etc/sysctl.conf に以下の設定を追加した(監視するファイルの上限を増やした)
fs.inotify.max_user_watches = 819200
以下で設定反映(「/sbin/sysctl -p」が必要だった)
# /sbin/sysctl -p # service lsyncd restart # service lsyncd status
しばらく待つと同期が再開された
■メールを送信しても届かない / 迷惑メールとして処理される 1
※DNS設定と、確認すべき基本事項と、判定ツールについて その他サーバ設定やプログラムの記述については、「メールを送信しても届かない / 迷惑メールとして処理される 2」以降に記載している Aレコード、SPFレコード、TXTレコードの設定などを行う 今はさらに DKIM、DMARC も設定するといいとされる 具体的な内容は Network.txt の「メールを送信する際、迷惑メール扱いされないための設定」を参照 プログラムから送信する際に送信元メールアドレス(送信元サーバ)を改変している場合で、突然迷惑メール扱いされることが増えた場合、 そのドメインにSPF・TXTレコードが最近設定された可能性はある (以前は設定されていなかったが、迷惑メール対策に後から追加されることはある) 以下のようなコマンドで、SPF・TXTレコードが設定されているかどうかは判る
$ dig refirio.net any
そもそも送信元メールアドレスの改変は非推奨だが、 どうしても改変が必要ならドメインの所有者にSPF・TXTレコードを設定してもらう必要がある ■DNSの逆引き設定 AWSの場合、DNSの逆引き申請を行うと解消されることがある 例えば web1.refirio.net (203.0.113.1) と web2.refirio.net (203.0.113.2) の2台構成のサーバがあるとして、 あらかじめDNSで
web1.refirio.net. A 203.0.113.1 web2.refirio.net. A 203.0.113.2
このように設定を行って web1.refirio.net と web2.refirio.net でサーバを参照できるようにしておき、AWSにDNSの逆引き申請を行う 詳細は AWS.txt の「メールの制限緩和」を参照 ■メールの本文 本文にURLが記載されたメールを受け取らない設定になっていることもある キャリアの設定画面で変更できることがある システムからサンクスメールを送る必要がある場合、 入力された本文は記載せずに送信完了の旨の定型文を送るだけにすることも検討する ■メールアドレスの存在確認 単純にメールの送信先を間違っている可能性がある 精度は不明だが、以下のツールでメールアドレスの存在を確認できる メールアドレス存在・生存・死活確認ツール http://address-kakunin.com/ ■メールアドレスのRFC違反 「.」(ピリオド)をアドレス内で連続使用したり、アドレスの最後に設定すると、一部のプロバイダとメールを送受信できない場合がある 根本解決は、メールアドレスを変えてもらうしかない NTTドコモ/auの連続ドット/@前ドットメールアドレスの問題 - The blog of H.Fujimoto https://www.h-fj.com/blog/archives/2009/03/01-100125.php 特殊な形式のアドレス(RFC違反アドレス)のご利用について | ドコモメール | サービス・機能 | NTTドコモ https://www.docomo.ne.jp/service/docomo_mail/rfc_add/ 長年苦しめられてきた、ドコモメールの駄目な仕様が、iOS14のお陰で予定より早く消えそうで嬉しい! - 人生100年!生涯エンジニア人生! https://kawahara-ci.hatenablog.com/entry/2020/11/16/email_address_violated_rfc 何かしらのサービスを提供しているなら、以下のような案内を記載しておくといいかもしれない 【重要】ドコモ、auのメールアドレスをご利用のお客様へ | SONOKO オンラインショップ https://www.sonoko.co.jp/user_data/oshirase10.php 以下にエラーメッセージの表示例がある メールの送受信ができない!? RFC違反メールアドレスを知っていますか? : ビジネスとIT活用に役立つ情報(株式会社アーティス) https://www.asobou.co.jp/blog/web/mail-rfc ■不正なドメイン&サブドメインからの送信 from@dev-test.example.com から送信するのは問題無いが、from@dev_test.example.com から送信しても届かないことがある 環境によっては届くこともあるようだが、ドメイン・サブドメイン部分にアンダーバーを含むのはそもそも推奨されない メール送信に限らず、SSL証明書を発行できないなどのトラブルが発生することもある ドメイン・サブドメインにアンダーバーを含めないように注意する ドメイン名に"_"(アンダースコア)を使ってはいけない | 企業組合コンピュータユニオン https://ccu.or.jp/2019/02/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%90%8D%E3%81%AB%EF%BC%BF%E3%82%A2%E... ドメインにアンダーバーが使えないって誰が決めたんだ - Qiita https://qiita.com/daichi_yamazaki/items/d5e3e0b11d11ef987334 ホスト名(ドメイン名)にアンダースコアが使えないってやつ - まぐねっとのブログ https://magnet88jp.hateblo.jp/entry/2020/12/01/165958 Apache 2.4.25 以降でホスト名のアンダースコアで 400 が出る場合の対処方法 | gotohayato.com https://gotohayato.com/content/148/ 上記の内容をまとめると、以下のようになる ・URIの仕様上、アンダーバーを使うことは問題無い ・ドメイン名にアンダーバーを使うことは推奨されない(禁止ではないみたい) ・ただしレジストラの技術細則で「英字("A"から"Z")、数字("0"から"9")、ハイフン("-")からなる文字列」と定義されていることがある 「.jp」や.「tokyo」では、アンダーバーは認められていない ・余計なトラブルを避けるためにも、「ドメイン&サブドメインではアンダーバーを使わない」とするのが無難 ■バウンスメールを解析 Command.txt の同項目を参照 ■迷惑メール度の判定 「mail-tester」を使えば、メールアドレスの迷惑メール度を判定できる サイトにアクセスすると test-ctz0b@mail-tester.com のようなメールアドレスが表示される 表示されたメールアドレスにメールを送信 「THEN CHECK YOUR SCORE」をクリックすると、判定が表示される もしPHPから送信するメールの迷惑メール度を判定したいなら、そのPHPから mail-tester にメールを送る Newsletters spam test by mail-tester.com https://www.mail-tester.com/ 迷惑メール度判定サービス「mail-tester」 | SendGridブログ https://sendgrid.kke.co.jp/blog/?p=5190 あなたのメールアドレスがどれぐらいスパムっぽいか判定してスコア付けする「mail-tester」 - GIGAZINE https://gigazine.net/news/20151019-mail-tester/ SendGridのブログにて、「mail-tester」より後に「MailGenius」が紹介されている 後発の記事なので、もしかしたらこちらの方がいいかもしれない 迷惑メール度判定サービス 「MailGenius」のご紹介 | SendGridブログ https://sendgrid.kke.co.jp/blog/?p=14778
■メールを送信しても届かない / 迷惑メールとして処理される 2
※主にサーバ設定について サーバのホスト名を設定していない場合、メールの送信元ドメインも適切なものにならない これが原因で、環境によってはメールが届かないことがある(迷惑メール対策を厳しく行っている場合など) サーバ用にドメイン(もしくはサブドメイン)を用意し、 hostname /etc/hosts /etc/sysconfig/network でホスト名に設定する。(例えば mail.refirio.net などを設定する) DNS側でも
mail.refirio.net A 203.0.113.1
のように設定しておく 送信されるメールのメールヘッダが
Received: (from apache@localhost) by ip-172-31-22-116.ap-northeast-1.compute.internal (8.14.4/8.14.4/Submit)
このような状態から
Received: (from apache@localhost) by mail.refirio.net (8.14.4/8.14.4/Submit) id u8E9t7Oc017547
のような状態になればOK メールが届くか様子を見る
■メールを送信しても届かない / 迷惑メールとして処理される 3
※主にプログラムについて ■Return-Path を追加する Return-Path は、メールが届けられなかったときにエラーメールを送信するときの宛先 Return-Path に差出人と同じメールアドレスを設定すると、迷惑メール判定されにくくなる PHPでメール送信する際に迷惑メールと判断されないために気をつけること https://blog.ver001.com/php_mail_spam/ mb_send_mail(),mail()で第5引数を設定する際の注意点 - t_komuraの日記 https://t-komura.hatenadiary.org/entry/20131223/1387804821 mb_send_mail関数でReturn-Pathを設定する方法 | PHPプログラミングの教科書 [php1st.com] https://php1st.com/2329 ■X-PHP-Originating-Script を削除する PHPプログラムでメールを送信すると、メールヘッダに「X-PHP-Originating-Script」が含まれることがある が、本番環境では含まれない設定にすることが推奨されている X-PHP-Originating-Script【メールヘッダ】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 https://wa3.i-3-i.info/word16324.html icloud.comやme.comやhotmailにメールが届かない時 - Qiita https://qiita.com/menkatsukiroku/items/98d447317c3cafd65602 mail.add_x_header はデフォルトで On なので、メールヘッダに以下のような情報が記録される
X-PHP-Originating-Script: 48:mail.php
mail.add_x_header を Off にすると記録されなくなる 本番環境では Off にすることを推奨されている
# vi /etc/php.ini
;mail.add_x_header = On mail.add_x_header = Off
# service httpd restart
■PHPMailerでのメール送信について ※PHPMailerでのメール送信については、Etcetera.txt の「PHPMailerを使ってSMTPでメールを送信する」も参照 PHPMailerでメールを送信している場合、RFC違反のメールアドレスにはそもそも送信処理自体が行われない (RFCについては、このファイル内の「メールアドレスのRFC違反」を参照) つまりmaillogなどに送信ログもエラーログも残らないので注意 以下の記事を参考に、RFC違反のメールアドレスにも無理矢理送信できるようになるみたい(未検証) RFC規格に沿わないメールアドレスにPHPMailer6系でメールを送信出来るようにする - Qiita https://qiita.com/sayama0402/items/72d41ff5b030dba88982
■メールを送信しても届かない / 迷惑メールとして処理される 4
※主にブラックリストについて ■IP拒否 その1 以下を参考に、受信拒否リストからの削除依頼をすれば届くようになることがある 「Web1から送信すれば届くのに、Web2から送信すると届かない」のような場合も、IP拒否の可能性が高い iCloudメール送信エラー proofpointのブロック解除 | かっぱの知恵袋 https://onaraboo.com/?p=537 proofpointでiCloud.comへのメールがブロックされた際の解除方法 | 己で解決!泣かぬなら己で鳴こうホトトギス https://onoredekaiketsu.com/unlock-emails-to-icloud-of-proofpoint/ @me.comや@icloud.comなどのメアドがお問い合わせフォーム、メール送信できない場合に確認する事 https://www.beginnerweb.net/icloudmaile-formspam.html 以下はAppleが運営しているメールサーバフィルタらしい Home | Proofpoint Dynamic Reputation - IP Lookup https://ipcheck.proofpoint.com/ IPアドレスを入力し、ブロックされていれば解除申請画面が表示される 以下は申請例。「Additional Details」は日本語でいいらしい Contact Name: Taro Yamada Email: taro@refirio.net Company: refirio.net Additional Details: ブロックの解除をお願い致します。 ■IP拒否 その2 Proofpoint以外にもMicrosoft・SpamCop・Spamhausなど、色々な企業がブラックリストを作っており、色々な企業がそのリストを利用している ブラックリストによって拒否された場合、エラーメールに 「554 5.7.1 Service unavailable; Client host [203.0.113.1] blocked using bl.spamcop.net」 のように記載される可能性が高いため、これによって対象となったリストを判断できる ブラックリストの基礎知識と対処法 | SendGridブログ https://sendgrid.kke.co.jp/blog/?p=11357 リストから除外のポータルを使って、Office 365 の受信拒否リストから自分自身を削除する https://technet.microsoft.com/ja-jp/library/mt661881(v=exchg.150).aspx SpamCopとは http://b2antispam.s33.xrea.com/doc/help/online/03_ShochiIraiShien/5-4_SpamCopRiyou/5-6-0_aboutSpamCo... SpamCop提供のDNSBLに登録されてしまった時 | ぽちゃ猫.com https://www.pochaneko.com/spamcop/ [共通] SPAMHAUSでのブラックリスト登録解除手順 https://faq.wadax.ne.jp/s/article/1500 ■IP拒否 その3 2021年2月1日、SpamCop側のトラブルで正常なメールもブラックリスト扱いになる…というトラブルがあった 「何故急にブロックされたのか分からない」という場合、 「Proofpoint」「SpamCop」などのサービス名でTwitterやYahoo!でのリアルタイム検索を利用すると原因にたどり着けるかもしれない https://twitter.com/umiushizn/status/1356044492634116097 https://twitter.com/tss_0101/status/1356019638912466948 https://twitter.com/unos/status/1356143511507148802 https://twitter.com/tss_0101/status/1355886898590359552 https://twitter.com/NETASSIST_/status/1356060529647734785 ■IP拒否 その4 企業が独自にIP拒否を行っている可能性がある(AWSサーバからの一斉拒否、など) その場合、IPアドレスを知らせて許可してもらう ■AOL AOLは一般的に届かないことが多いらしい 当社からのメールが受信できないお客様へ http://www.ats.co.jp/mailmissing.html AOL曰く 「AOLでは対処方法を提示できませんので、対象の方との連絡については、別途の方法をご検討ください」 とのこと 一部のメールアドレスと送受信できない http://info.aol.jp/mail/help02401/ どうやらAOLは、AOLユーザ同士のやりとり以外を重視していないらしい 「AOLは届かないことが多いので、他のアドレスを使ってください」と案内しておくのが安全そう ■Hotmail Hotmailも届かないことが多いらしい 『ホットメールをお使いの皆様へ』-北海道.co.jp- https://web.archive.org/web/20081120021223/http://www.origotou.net/hajimete/hotmail_faq.htm OutlookやHotmail宛にメールが届かない! Microsoftのブロックリストの解除申請方法 - ベアメールブログ https://baremail.jp/blog/2022/11/24/2882/ Hotmail(ホットメール)で、メールの受信がうまくいかない場合の対処方法 | CanaGo-Visa Consulting https://canago-visa.com/hotmail/ hotmailでメールが届かない理由と対処法 | ガジェット・ITメモ https://jpneet.com/gadget/hotmail_dontget/ ブラックリストに登録された場合、Microsoftに申請することで解除される可能性があるらしい Outlook.comのサーバーへのメールが届かない場合の対処法 - ドットワン合同会社 https://dot1.tv/outlook-blocks3150/ Microsoft系メールサーバーにメールが届かない場合の解決方法について (S3140) | GMOアドパートナーズ TECH BLOG byGMO https://techblog.gmo-ap.jp/2022/04/26/microsoftmailservers3140/ hotmailメールアドレスがブラックリストに登録されているため解除をしたい - お客さまサポート https://help.arena.ne.jp/hc/ja/articles/360034194854-hotmail%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%... ■Ezweb ezweb.ne.jpも厄介らしい ・届く場合と届かない場合がある ・ezwebはエラーがあってもエラーを返さないので調査が困難 ・ドメイン指定受信以外に「なりすまし規制」設定の変更で届くことがある ・同じサーバから送っても、本文の差でなりすまし規制に引っかかった…という可能性はゼロではない Gmailからau(ezweb)にメールが届かない!原因と対策 - NAVER まとめ https://matome.naver.jp/odai/2147045052147274001
■ZabbixでSSHを監視できない
SSHのポート番号を10022に変更している場合、以下の設定を行う 「設定 → ホスト → アイテム」で「Template_Linux:SSH server is running」を複製し、 説明 : SSH(10022) server is running キー : net.tcp.service[ssh,,10022] を作成する 「設定 → ホスト → トリガー」で「Template_Linux:SSH server is down on {HOSTNAME}」を複製し、 名前 : SSH(10022) server is down on {HOSTNAME} 条件式 : {refirio.net:net.tcp.service[ssh,,10022].last(0)}=0 を作成する これでSSHの監視対象が10022番ポートになる (「アイテム → トリガー」の順で作成しないとエラーになる) 補足: net.tcp.service[tcp,,10022] ではなく net.tcp.service[ssh,,10022] にしておくと、返ってきた値がsshとして正しいか判定する?
■ZabbixでFTPを監視できない
Zabbixは10055番ポートで対象サーバにアクセスし、そこから127.0.0.1として各サービスを監視する 従ってFTPにアクセス制限を設けている場合、ローカルからFTP接続できるようにする必要がある
# vi /etc/hosts.allow
vsftpd: 127.0.0.1
421 Service not available. で FTP の get が失敗する http://tooljp.com/linux/faq/709FC95863056BEC49257CAC005F00B4.html
■Zabbixで管理画面が表示されない
Zabbix(Webフロントエンド)がデータを返さない http://blog.5v-gnd.net/archives/1070 WordPressで画面真っ白や502エラーの原因は「eAccelerator」だった http://www.multiburst.net/sometime-php/2010/06/eaccelerator/ php_flag eaccelerator.enable 0 php_flag eaccelerator.optimizer 0 この設定を追加すれば直ることがある zabbixのドキュメントルート /usr/share/zabbix それでも駄目ならhttpdの再起動で直ることがある。
# service httpd restart
■chkrootkitが誤動作する
chkrootkit 誤検知の対応方法 http://qiita.com/KoriCori/items/4094e79a7d7fc0329117 chkrootkit report in refirio.net Checking `bindshell'... INFECTED (PORTS: 37998) というCron実行メールが届く rootkitを仕掛けられた可能性があるが、誤検知の可能性があるので以下で様子を見る
[root@web1 ~]# chkrootkit | grep INFECTED … サーバ上で再度確認 Checking `bindshell'... INFECTED (PORTS: 37998) [root@web1 ~]# lsof -i -P | grep 37998 … 該当ポートを使用しているプロセスを確認 rpc.statd 2125 rpcuser 10u IPv6 9324 0t0 TCP *:37998 (LISTEN) [root@web1 ~]# netstat -anp | grep 37998 tcp 0 0 :::37998 :::* LISTEN 2125/rpc.statd [root@web1 ~]# ls /etc/init.d/ | grep rpc rpcbind rpcgssd rpcidmapd rpcsvcgssd
AWSのマウントでハマった時のメモ http://qiita.com/shoya/items/009ca1e06d6d9c9f2e67 rpcbindを再起動すると直るかも? 今回は原因不明だったが、yumですべてをアップデートしてサーバを再起動すれば表示されなくなった
■Clam AntiVirus(アンチウィルスソフト)からログファイルがロックされているとエラーが来る
以下の内容が大量に記録されたCron実行メールが届く
ERROR: /var/log/freshclam.log is locked by another process
/var/log/freshclam.log を確認すると、以下のメッセージが何度も記録されていた
[LibClamAV] cli_loadldb: logical signature for Email.Trojan.Toa-5493297-0 uses PCREs but support is disabled, skipping
Clam AntiVirus 自体の問題かもしれないが、アップデートすればエラーが出なくなった
# yum update clamav
AWSのClamavとPCRE http://d.hatena.ne.jp/tetsuya_odaka/20160927/1474957752 その他参考になりそうなページ /var/log/freshclam.log is locked by another process https://www.shigizemi.com/2012/12/23/freshclam-log-is-locked-by-another-process/ Clam AV http://takeshou.blogspot.jp/2009/10/clam-av.html Debian 8 (Jessie) - アンチウイルスソフト導入! http://www.mk-mode.com/octopress/2015/05/29/debian-8-anti-virus-installation/ freshclam の更新がうまくいきません。 https://forums.ubuntulinux.jp/viewtopic.php?pid=112772 ClamAVがアップデートした際にfreshclamが正常に動かない http://www.sys-cube.co.jp/blog/995.html
■yumを実行できない
/etc/yum.conf に例えば以下の設定がある場合、yum install php-xml など、追加インストールも行えなくなる (依存性を解決できない、と言われたりする) いったん設定を無効にしてyumを実行する
[main] exclude=gcc* glibc* kde* openssh* kernel* httpd* php* mysql*
■「Not using downloaded repomd.xml because it is older than what we have」というメールが届く
1時間ごとに、Cronから以下のようなメールが届く
/etc/cron.hourly/0yum-hourly.cron: Not using downloaded repomd.xml because it is older than what we have: Current : Wed Oct 31 07:04:57 2018 Downloaded: Wed Oct 24 04:10:45 2018
「リポジトリの情報が更新されたので、サーバ上にある情報は古いです」という内容 yumのキャッシュをクリアすることで解消する 以下は実行例
$ sudo yum clean all 読み込んだプラグイン:fastestmirror, priorities, update-motd, upgrade-helper リポジトリーを清掃しています: amzn-main amzn-updates zabbix zabbix-non-supported Cleaning up everything Cleaning up list of fastest mirrors
yum のエラー「Not using downloaded repomd.xml because it is older than what we have」 - ラボラジアン https://laboradian.com/yum-errr-not-using-downloaded-repomd-xml-older-have/ [忘備録]yumでリポジトリエラーが出る場合の対処法[CentOS] https://blog.k-abe.com/memo/post-157 yum update でエラー | 自宅サーバー構築メモ(CentOS) http://yokensaka.com/centos/?p=483 カスタムRPMや独自yumリポジトリではじめるソフトウェア管理術 | さくらのナレッジ https://knowledge.sakura.ad.jp/1086/ それでも駄目な場合、yumのキャッシュを直接削除してみる
# cd /var/cache/yum # ll 合計 4 drwxr-xr-x 3 root root 4096 10月 28 14:33 x86_64 # rm -rf x86_64 # ll 合計 0
それでも駄目なことがあったが、数日放置すると収まった 参照先リポジトリの問題で、そちらで何かしらの対策がされたか CentOS7.6でyumが「Not using downloaded remi-safe/repomd.xml because it is older than what we have」というエラーを吐いた - Qiita https://qiita.com/shimano_equipped/items/c4dfa635216f804e2fcd Cronからremi-safeに関するメールが届いた場合の3つの対処法 | Minory https://minory.org/cron-remi-safe.html
■「Not using downloaded amzn2-core/repomd.xml because it is older than what we have」というメールが届く
「「Not using downloaded repomd.xml because it is older than what we have」というメールが届く」を参照
■「Updateinfo file is not valid XML」というメールが届く
1時間ごとに、Cronから以下のようなメールが届く
/etc/cron.hourly/0yum-hourly.cron: Updateinfo file is not valid XML: <open file '/var/cache/yum/x86_64/2/epel/92f2e15cad66d79ea1ad327e2af7af89d98e4d153d7a3e27ff41946f476af5b4-updateinfo.xml.zck', mode 'rt' at 0x7fbea2fe5930>
yumやepelなどのリポジトリ側で問題があったとき、このようなエラーになるみたい
# yum check-update Loaded plugins: extras_suggestions, fastestmirror, langpacks, priorities, update-motd Loading mirror speeds from cached hostfile * epel: d2lzkl7pfhq30w.cloudfront.net 190 packages excluded due to repository priority protections gnupg2.x86_64 2.0.22-5.amzn2.0.3 amzn2-core kernel.x86_64 4.14.114-105.126.amzn2 amzn2-core kernel-devel.x86_64 4.14.114-105.126.amzn2 amzn2-core kernel-headers.x86_64 4.14.114-105.126.amzn2 amzn2-core kernel-tools.x86_64 4.14.114-105.126.amzn2 amzn2-core libjpeg-turbo.x86_64 1.2.90-5.amzn2.0.3 amzn2-core libssh2.x86_64 1.4.3-12.amzn2.2 amzn2-core man-db.x86_64 2.6.3-9.amzn2.0.3 amzn2-core mod_http2.x86_64 1.14.1-1.amzn2 amzn2-core python-urllib3.noarch 1.24.3-1.amzn2.0.1 amzn2-core Obsoleting Packages python2-simplejson.x86_64 3.10.0-2.el7 epel python-simplejson.x86_64 3.2.0-1.amzn2.0.2 installed Updateinfo file is not valid XML: <open file '/var/cache/yum/x86_64/2/epel/92f2e15cad66d79ea1ad327e2af7af89d98e4d153d7a3e27ff41946f476af5b4-updateinfo.xml.zck', mode 'rt' at 0x7fedfe19a810>
というコマンドで再現できる
# yum clean metadata # yum check-update
もしくは
# yum clean all # yum update
というコマンドでメタデータやキャッシュをクリアすることで収まることがあるみたい …だが、実行しても解消しなかった。まだyumやepelなどのリポジトリ側の問題が解消していないのかも?引き続き要確認 /etc/cron.hourly/0yum-hourly.cron: Updateinfo file is not valid XML のエラーメールが届く | キュア子の開発ブログ https://curecode.jp/tech/yum-cron-updateinfo-file-is-not-valid-xml/ 「Updateinfo file is not valid XML」について | NetCircus Envisage https://www.netcircus.jp/2017/06/23/%E3%80%8Cupdateinfo-file-is-not-valid-xml%E3%80%8D%E3%81%AB%E3%8... Twitterで「Updateinfo file is not valid XML」を検索すると、同じ症状に遭遇している人は世界中に多数 CentOS7で発生しているみたい https://twitter.com/centoslinux/status/1133787232429596673 https://twitter.com/tAkA_twitte/status/1133680637246754816 https://twitter.com/curecochan/status/877741585164673025 https://twitter.com/stockton_jazz/status/877821713379016704 以下は公式のツイートではないが、まだyumやepelなどのリポジトリ側の問題が解消していないみたい? https://twitter.com/tAkA_twitte/status/1133932386129809408 Googleで「epel error」で24時間以内の記事を検索すると以下などのトピックもある https://unix.stackexchange.com/questions/521770/yum-failing-check-update https://www.spinics.net/linux/fedora/epel-devel/msg02794.html 大元のリポジトリがなかなか完全復旧しない場合、/etc/cron.hourly/0yum-hourly.cron を編集すれば毎時の更新チェックを無効化できる
# Action! exec /usr/sbin/yum-cron /etc/yum/yum-cron-hourly.conf ↓ #exec /usr/sbin/yum-cron /etc/yum/yum-cron-hourly.conf
この状態で様子見し、数日後に「yum check-update」を実行してみると「Updateinfo file is not valid XML」のメッセージは表示されなくなっていた 問題無さそうなら、上記のファイルをもとに戻しておく
■「Could not get metalink」というメールが届く
複数のサーバから、以下のようなメールが届いた
/etc/cron.hourly/0yum-hourly.cron: Could not get metalink https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=x86_64 error was 12: Timeout on https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=x86_64: (28, 'Connection timed out after 5000 milliseconds')
EPELリポジトリにアクセスしようとしてタイムアウトになっている 大元のサーバが不安定なだけの可能性はあるので様子見とした 以下は直接の原因では無いが、参考にはなりそう yumでepel使った時、「Could not get metalink https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=x86_64」って怒られたもんで - Opensourcetechブログ https://www.opensourcetech.tokyo/entry/20200529/1590737497
■「Could not retrieve mirrorlist」というメールが届く
1時間ごとに、Cronから以下のようなメールが届く
/etc/cron.hourly/0yum-hourly.cron: Could not retrieve mirrorlist https://mirror.webtatic.com/yum/el6/x86_64/mirrorlist error was 14: curl#60 - "SSL certificate problem: certificate has expired"
サーバにインストールされている中間証明書の期限が切れていたため、curl系のコマンドでSSL接続をした時にエラーになっていた (証明書が何らかの理由で破損したときも、このエラーになるらしい) 有効な証明書なのにcertificate has expiredになる件 | Otogeworks https://otogeworks.com/blog/a-valid-certificate-has-expired/ 以下は実際に対応したときの内容 curlでエラーになることが確認できる
$ curl https://something.com curl: (60) SSL certificate problem: certificate has expired More details here: https://curl.haxx.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
ca-certificatesパッケージ(証明書が含まれている)を更新
$ sudo yum update ca-certificates
curlでエラーにならないことが確認できる
$ curl https://something.com <html><head><title>Something.</title></head> <body>Something.</body> </html>
以下はca-certificatesパッケージの更新前と更新後の比較 若干新しくなっていることが確認できる
$ yum list installed | grep ca-certificates ca-certificates.noarch 2018.2.22-65.1.21.amzn1 @amzn-updates $ sudo yum update ca-certificates $ yum list installed | grep ca-certificates ca-certificates.noarch 2018.2.22-65.1.30.amzn1 @amzn-updates
有効な証明書なのにcertificate has expiredになる件 | Otogeworks https://otogeworks.com/blog/a-valid-certificate-has-expired/
■管理しているサーバを送信元として迷惑メールが送られてきた
ここでは「管理しているサーバ = refirio.net」であるとする メール受信のための設定をしていない、さらにPostfix自体も稼働させていないサーバから送信元 info@refirio.net として server@refirio.org に迷惑メールが送られてきた メールヘッダを確認すると、送信元サーバは batch1.refirio.net のように見える 以下は 「refirio.net ではメールの受信は行っていないので外部からメールは受け取らないはず、迷惑メール送信の不正プログラムでも設置されたのか」 と思って調査したメモ 確認に使用したメールの送信元は、ここでは example@example.com とする ■確認 example@example.com を送信元として info@refirio.net にメールを送ると、batch1サーバの /var/log/maillog に以下が記録された。
Feb 24 18:12:02 batch1 sendmail[8479]: 31O9C2Kp008479: Authentication-Warning: batch1.refirio.net: apache set sender to auto@refirio.net using -f Feb 24 18:12:02 batch1 sendmail[8479]: 31O9C2Kp008479: from=auto@refirio.net, size=2037, class=0, nrcpts=0, msgid=<202302240912.31O9C2Kp008479@batch1.refirio.net>, bodytype=8BITMIME, relay=apache@localhost Feb 24 18:12:19 batch1 sendmail[8499]: 31O9CJLw008499: from=<example@example.com>, size=2431, class=0, nrcpts=1, msgid=<CAOwUPtZZ7TR0=XmUKL4F1p3TtzXrOhHQrsO9ZN4DcLwsg5vmaw@mail.gmail.com>, proto=ESMTP, daemon=MTA, relay=mail-proxy111.phy.lolipop.jp [157.7.104.15] Feb 24 18:12:19 batch1 sendmail[8500]: STARTTLS=client, relay=mx01.lolipop.jp., version=TLSv1/SSLv3, verify=FAIL, cipher=ECDHE-RSA-AES256-GCM-SHA384, bits=256/256 Feb 24 18:12:19 batch1 sendmail[8500]: 31O9CJLw008499: to=server@refirio.org, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=32643, relay=mx01.lolipop.jp. [157.7.107.233], dsn=2.0.0, stat=Sent (Ok: queued as 5BC9D1404F083) Feb 24 18:12:50 batch1 sendmail[8539]: 31O9Cooa008539: localhost [127.0.0.1] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA Feb 24 18:13:51 batch1 sendmail[8643]: 31O9DpJk008643: localhost [127.0.0.1] did not issue MAIL/EXPN/VRFY/ETRN during connection to MTA Feb 24 18:14:01 batch1 sendmail[8691]: 31O9E1Dq008691: Authentication-Warning: batch1.refirio.net: apache set sender to auto@refirio.net using -f Feb 24 18:14:01 batch1 sendmail[8691]: 31O9E1Dq008691: from=auto@refirio.net, size=2727, class=0, nrcpts=0, msgid=<202302240914.31O9E1Dq008691@batch1.refirio.net>, bodytype=8BITMIME, relay=apache@localhost
これは 送信日時: 02/24 18:12:19 送信元: example@example.com 送信先: server@refirio.org 送信元サーバ: mail-proxy111.phy.lolipop.jp 送信先サーバ: mx01.lolipop.jp 追加情報: - サイズ: 2KB 結果: 成功 ということなので、迷惑メールのときと状況は一致する つまり現象を再現できた ■調査 refirio.net のMXレコードは以下のようになっている
# dig refirio.net mx refirio.net. 300 IN MX 10 batch1.refirio.net.
上記設定により、メールは batch1.refirio.net サーバが受け取るように指定されている batch1.refirio.net サーバでPostfixは稼働させていないが、古いサーバなのでsendmailが稼働していた
# ll /etc/alternatives/ | grep mta-sendmai lrwxrwxrwx 1 root root 26 11月 15 2016 mta-sendmail -> /usr/lib/sendmail.sendmail lrwxrwxrwx 1 root root 42 11月 15 2016 mta-sendmailman -> /usr/share/man/man8/sendmail.sendmail.8.gz
参考までに、Postfixを稼働させている場合は以下のようになる
# ll /etc/alternatives/ | grep mta-sendmai lrwxrwxrwx 1 root root 25 1月 25 08:05 mta-sendmail -> /usr/lib/sendmail.postfix lrwxrwxrwx 1 root root 41 1月 25 08:05 mta-sendmailman -> /usr/share/man/man1/sendmail.postfix.1.gz
batch1.refirio.net サーバの /etc/aliases を確認すると、以下の記述がある。
mailer-daemon: postmaster postmaster: root 〜略〜 root: server@refirio.org
メールエイリアスの設定 | 技術ノート http://www.gabacho-net.jp/tech-note/aliases.html 上記ページによると > これらは、MAILER-DAEMON(メール配送デーモン:sendmailデーモンのこと)宛に通知されたメールはpostmaster(郵便局長の意味)が受け取るべきこと、 > さらにpostmaster宛のメールはroot(システム管理者)が受け取るべきことを定義しています。 とのこと よって 1. example@example.com(外部)から info@refirio.net へメールを送信 2. DNSのMXレコードにより、batch1.refirio.net へ転送 3. batch1.refirio.netのAliasにより、postmaster → root → server@refirio.org の順で転送 となる つまり、迷惑メール送信リストの中に info@refirio.net があり、その内容が server@refirio.org に転送されてきた …というもの ■参考 MXレコードとは?役割と確認方法についてわかりやすく解説! - Value Note - わかる、なるほどなIT知識。 https://www.value-domain.com/media/mx_record/ オープンソースのPostfixとsendmailを比較 https://www.ossnews.jp/compare/postfix/sendmail reCatnap: linux MTAの確認(sendmail、postfixの確認) https://tips.recatnap.info/laboratory/detail/id/345 postfixのメール再送信と、再送メールキューの動作 | りんか ネット https://rin-ka.net/postfix-postqueue/ Postfixのキューの再送間隔がわかりにくいため、やさしく解説してみた | KITA-SAN.BLOG https://kita-san.blog/computer-related/postfix-retry/ Postfixでの具体的な設定箇所が説明されている メールエイリアスの設定 | 技術ノート http://www.gabacho-net.jp/tech-note/aliases.html
■ディスク容量が残り少ない
ディスク容量は以下のコマンドで確認できる
$ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/xvda1 63G 57G 6.3G 91% / devtmpfs 987M 60K 987M 1% /dev tmpfs 997M 0 997M 0% /dev/shm
根本解決にはディスクの容量アップが必要だが、不要ファイルを削除することで対処できることがある /var/cache/yum の容量は大きくなりがちなので、クリーンすることで容量を減らすことができる /var/cache/ 内のデータをすべて削除するのは危険
# du -s /var/cache/* | sort -nr 2226060 /var/cache/yum 1792 /var/cache/man 48 /var/cache/fontconfig 28 /var/cache/ldconfig 12 /var/cache/rpcbind 4 /var/cache/mod_ssl 4 /var/cache/mod_proxy 4 /var/cache/logwatch # yum clean all 読み込んだプラグイン:fastestmirror, priorities, update-motd, upgrade-helper リポジトリーを清掃しています: amzn-main amzn-updates Cleaning up everything Cleaning up list of fastest mirrors # du -s /var/cache/* | sort -nr 34660 /var/cache/yum 1792 /var/cache/man 48 /var/cache/fontconfig 28 /var/cache/ldconfig 12 /var/cache/rpcbind 4 /var/cache/mod_ssl 4 /var/cache/mod_proxy 4 /var/cache/logwatch
/var/cache 下のファイルは消して良いのか http://qiita.com/amedama/items/eee14483b86de2842c42 ディスク容量がいっぱいの時にやる事 http://qiita.com/oshou/items/2630f9f1c1131beb748e なお「yum clean all」はCentOS用なので、Ubuntuの場合は「apt-get clean」とする(未検証) Ubuntuで不要なファイルを削除してディスクスペースを確保する - Qiita https://qiita.com/inohiro/items/5d358c30eb7bacb37c7c
■inodeが残り少ない
Linuxではファイルやディレクトリに重複しない番号が割り振られていて、これをinodeと呼ぶ この番号は、パーティションサイズにより上限が定められている つまりサイズの小さいファイルを大量に作成すると、 データ領域の容量に余裕があっても新規にファイルやディレクトリを作成できなくなる 古いログファイルは削除するなどして、容量を確保する
$ df -ih … ファイル削除前にinodeを確認(91%使用) ファイルシス Iノード I使用 I残り I使用% マウント位置 /dev/xvda1 2.0M 1.9M 199K 91% / devtmpfs 248K 428 248K 1% /dev tmpfs 251K 1 251K 1% /dev/shm # df -ih … ファイル削除後にinodeを確認(55%使用) ファイルシス Iノード I使用 I残り I使用% マウント位置 /dev/xvda1 2.0M 1.1M 928K 55% / devtmpfs 248K 428 248K 1% /dev tmpfs 251K 1 251K 1% /dev/shm
以下のようにすれば、カレントディレクトリ以下のinode使用量をディレクトリごとに表示できる ただしrootディレクトリなど対象ファイルの多い場所で実行すると遅い
# for i in `ls -1`;do echo "`find ./$i -type f |wc -l` ... $i" ;done | sort -nr
例えば /var/log/command/uptime 内に 20160401, 20160402, 20160402 のようなディレクトリごとにログファイルを記録している場合、 それらをまとめて 2016.zip としてバックアップしてから2016年のデータを削除するには以下のようにする
# cd /var/log/command/uptime # zip -r 2016.zip 2016*/ # rm -rf 2016*/
iノード(inode)とは http://kazmax.zpp.jp/linux_beginner/inode.html Linuxでファイル名が文字化けして消せないファイルを、inode番号を指定して削除する方法 http://hamamuratakuo.blog61.fc2.com/blog-entry-1025.html inodeとは/inode消費が多いディレクトリの確認 http://tagutagu.com/?page_id=985
■AWSでPHPからMySQLに接続するための命令をインストールできない
「sudo yum install php-mysql」を実行して
Error: php55-common conflicts with php-common-5.3.29-1.7.amzn1.x86_64 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
のようなエラーになる場合、 Full Update to PHP5.5 on Amazon Linux http://serverfault.com/questions/566662/full-update-to-php5-5-on-amazon-linux などを参考にしつつ以下のコマンドを入力
$ sudo yum remove php-common $ sudo yum install php55 $ sudo yum install php55-mysqlnd $ sudo service httpd restart
PHPからmysql_connect()とPDOの両方で接続できるようになった 他の人が管理しているサーバだったので、PHPを正しく設定できていなかっただけかも
$ sudo yum install php55-mysqlnd $ sudo service httpd restart
だけでも良かったかも(要検証)
■ミドルウェアなどを起動できない
はじめからインストール&起動されていないか確認する 例えば
# ps aux | grep http
とすれば、httpが起動しているかどうか確認できる
■/var/log/messages に「kernel: hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }」と記録される
ハードディスクへの書き込みエラー ハードディスクが物理的に故障している可能性がある エラーログで障害原因を突き止めろ! | Think IT(シンクイット) https://thinkit.co.jp/article/736/1
■OSにログインするたびに「LC_CTYPE: cannot change locale」のようなエラーが表示される
ログインのたびに「LC_CTYPE: cannot change locale (ja_JP.UTF-8): No such file or directory」のようなエラーが表示される Vagrant + CentOS7 + Ansible でセットアップ…とした環境で発生することがあった CentOS7は、バージョンによっては日本語ロケールを取得できない?以下のようにして対処はできたい
$ sudo su - # locale -a | grep -i ja … 「ja_JP」が無い # localedef -f UTF-8 -i ja_JP ja_JP … 日本語ロケールを追加 # locale -a | grep -i ja … 「ja_JP」がある ja_JP ja_JP.utf8 # localectl set-locale LANG=ja_JP.utf8 … ロケールを設定 # localectl status
cannot change locale をやっつける - ARCHIVESDRIVE HB https://donbulinux.hatenablog.jp/entry/2018/08/06/143722
■さくらの専用サーバで再起動できない
コンソールでシャットダウンを押してもシャットダウンが始まらない。 15分ほど待っても何も起きないのでさくらに再起動を依頼。 機器リブート(サーバ再起動) http://www.sakura.ad.jp/function/security/reboot.html さくらのID、自身の名前、対象サーバのIPアドレスを連絡する必要がある。 依頼してから15分後くらいに連絡があり、再起動をしてくれた。 諸々の確認作業があるので、即座に再起動はできないらしい。 シャットダウンが始まらなかった原因は不明。

Advertisement