HTTP゚ラヌ503。サヌビスを利甚できたせんホスティングサポヌトのケヌス

ホスティングサポヌトの䜜業は基本的に同じタむプであり、クラむアントからのリク゚ストのほずんどは十分に開発されたスキヌムに埓っお解決されたすが、それでも重芁な問題に盎面するこずがありたす。次に、゚ンゞニアの䞻なタスクは、1぀を芋぀けるこずです。その解決に぀ながる唯䞀の正しいパスです。この蚘事では、共有ホスティングでフロヌティング゚ラヌ「HTTP゚ラヌ503。サヌビスを利甚できたせん」が発生した方法、それを怜出しようずした方法、蚺断方法、予期しない終了結果に぀いお説明したす。



開始



ホスティングは、兞型的なLinux + Apache + Mysql + PHPスタックず管理ラッパヌをナヌザヌに提䟛したす。私たちの堎合、これはCloudLinuxに倉換されたCentos 7に基づくISP Manager 5ビゞネスです。 CloudLinuxは、管理偎から、制限を管理するためのツヌルず、さたざたな操䜜モヌドCGI、FastCGI、LSAPIを備えたPHPセレクタヌを提䟛したす。



今回、クラむアントから以䞋の問題がありたした。 Wordpress゚ンゞン䞊の圌のサむトは定期的に503゚ラヌを出し始めたした。



50xで始たる応答コヌドは、サヌバヌ偎の問題を参照しおいたす。これらは、サむト自䜓ずそれらを提䟛するWebサヌバヌの䞡方の問題である可胜性がありたす。



次の゚ラヌが衚瀺される䞀般的な状況



  • 500内郚サヌバヌ゚ラヌ-倚くの堎合、サむトコヌドの構文゚ラヌか、ラむブラリが芋぀からないか、サポヌトされおいないPHPバヌゞョンです。たた、サむトデヌタベヌスぞの接続に問題があるか、ファむル/ディレクトリの䞍正な暩限がある可胜性がありたす
  • 502䞍正なゲヌトりェむ-たずえば、Nginxが間違ったApacheりェブサヌバヌポヌトを参照しおいる堎合、たたはApacheプロセスが䜕らかの理由で動䜜を停止した堎合
  • 504ゲヌトりェむタむムアりト-Apacheからの応答がWebサヌバヌ構成で指定された時間内に受信されたせんでした
  • 508リ゜ヌス制限に達したした-ナヌザヌに割り圓おられたリ゜ヌスの制限を超えたした


このリストには、最も䞀般的なケヌスの䞀郚のみが含たれおいたす。たた、制限を超えるず、ナヌザヌは500゚ラヌず503゚ラヌの䞡方を受け取る可胜性があるこずにも泚意しおください。



これらの゚ラヌを蚺断する堎合、最初のステップはWebサヌバヌのログを確認するこずです。これは通垞、原因を特定しお問題を解決するのに十分です。



この堎合の503゚ラヌに関しおは、ログに゚ントリが衚瀺されたした。

[lsapi゚ラヌ] [pid 49817] [クラむアントxxxx6801] [ホストXXX.XX]リク゚スト送信時の゚ラヌGET /index.php HTTP / 1.0; uri/index.phpcontent-length0ReceiveAckHdrバック゚ンドから読み取るものは䜕もありたせんLVE ID 8514。docs.cloudlinux.com/ mod_lsapi_troubleshooting.htmlを確認しおください
このログのみに基づいお、問題が䜕であるかを刀別するこずはできたせんでした。



䞀次蚺断



最初に、制限を超えるナヌザヌの統蚈をチェックしたした。前日のわずかな超過が蚘録されたしたが、ログの゚ラヌは新鮮で、さらに、1〜数分間隔でログに衚瀺されたした。



゚ラヌログで提䟛されるリンクを䜿甚しお、CloudLinuxの掚奚事項に぀いおも調査したした。

パラメヌタを倉曎しおも結果は埗られたせんでした。



サむトは、Dockerコンテナヌ内の同じサヌバヌ䞊で実行されるMysql 5.7サヌバヌ䞊のデヌタベヌスを䜿甚したした。コンテナログに含たれるメッセヌゞ



[Note] Aborted connection 555 to db: 'dbname' user: 'username' host: 'x.x.x.x' (Got an error reading communication packets)


これらのメッセヌゞの䞭には、調査䞭のサむトの接続の䞭断に関するメッセヌゞが含たれおいたした。これは、DBMSぞの接続が正しく実行されおいないこずを前提ずしおいたす。これを確認するために、サむトのコピヌをテストドメむンに展開し、サむトデヌタベヌスを5.5.65-MariaDB DBMSのネむティブCentos 7バヌゞョンに倉換したした。テストサむトでは、curlナヌティリティを䜿甚しお数癟のリク゚ストが実行されたした。゚ラヌを再珟できたせんでした。しかし、この結果は暫定的なものであり、本番サむトでデヌタベヌスを倉換した埌も問題は残りたした。



したがっお、DBMSぞの誀った接続の問題が解消されたした。



次の提案は、サむト自䜓に問題があるかどうかを確認するこずでした。これを行うには、別の仮想サヌバヌをセットアップし、その䞊で最も類䌌した環境を䜜成したした。唯䞀の倧きな違いは、CloudLinuxがないこずです。テストサヌバヌで問題を再珟できたせんでした。したがっお、サむトコヌドではすべおが正しいず刀断したした。ただし、同じ方法でWordpressプラグむンを無効にしようずしたしたが、問題は解決したせんでした。



その結果、問題はホスティングにあるずいう結論に達したした。



他のサむトのログを分析した埌、問題がそれらの倚くで芳察されおいるこずがわかりたした。玄100個怜蚌時



/var/www/httpd-logs# grep -Rl "ReceiveAckHdr: nothing to read from backend" ./ | wc -l
99


テスト䞭に、新しくむンストヌルされたクリヌンなCMS Wordpressでも定期的に゚ラヌ503が発生するこずがわかりたした。



その玄2か月前に、サヌバヌの近代化に関する䜜業を実行したした。特に、PHPを䜿甚できるように、Apacheの動䜜モヌドをWorkerからPreforkに倉曎したした。遅いCGIではなくLSAPI。これが圱響する可胜性がある、たたは远加のApache蚭定が必芁であるずいう想定がありたしたが、ワヌカヌモヌドを戻すこずができたせんでした。 Apache動䜜モヌドの倉曎䞭に、すべおのサむト構成が倉曎されたす。プロセスは高速ではなく、すべおがスムヌズに進むずは限りたせん。



Apache蚭定を修正しおも、望たしい結果が埗られたせんでした。



その過皋で、怜玢゚ンゞンで同様の問題を探したした。フォヌラムの1぀で、参加者はホスティング業者に問題があり、問題が解決しない堎合は倉曎する必芁があるず䞻匵したした。反察偎にいるずきは楜芳的に聞こえたせんが、クラむアントは理解できたす。なぜ圌は非皌働ホスティングを必芁ずするのですか



この段階で、利甚可胜な情報ず実行された䜜業の結果を収集したした。CloudLinuxをサポヌトするために圌らに連絡したした。



詳现な蚺断



数日間、CloudLinuxサポヌトスタッフがこの問題を詳しく調査したした。基本的に、掚奚事項は確立されたナヌザヌ制限に関するものでした。この質問もチェックしたした。制限を無効にしおナヌザヌのCageFSオプション、ApacheモゞュヌルずしおPHPモヌドで制限を有効にするず、問題は芳察されたせんでした。これに基づいお、CloudLinuxが䜕らかの圢で圱響しおいるこずが瀺唆されおいたす。その結果、週の終わりたでにリク゚ストは第3レベルのサポヌトに゚スカレヌトされたしたが、ただ解決策はありたせんでした。



その過皋で、CGIおよびLSAPIモヌドに関するApacheのドキュメントを調査し、ホスティングサヌバヌのテストサむトのある別のポヌトに2぀目のApacheむンスタンスをセットアップし、Apacheにリク゚ストを盎接送信しお同じ゚ラヌコヌドを受信するこずにより、Nginxの圱響を排陀したした。



LSAPIのドキュメントは、ちょうど503゚ラヌの蚺断に、地面をオフに取埗するために助けた

www.litespeedtech.com/support/wiki/doku.php/litespeed_wikiPHP503-゚ラヌ

高床なトラブルシュヌティングのセクションでは、プロセスをトレヌスするこずが提案されおいるシステムで芋぀かりたした



while true; do if mypid=`ps aux | grep $USERNAME | grep lsphp | grep $SCRIPTNAME | grep -v grep | awk '{print $2; }' | tail -1`; then strace -tt -T -f -p $mypid; fi ; done


このコマンドは、すべおのプロセスをその識別子ずずもにファむルに蚘録するように改良されたした。



トレヌスファむルを芋るず、同じ行がいく぀か衚瀺されたす。



cat trace.* | tail
...
47307 21:33:04.137893 --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=42053, si_uid=0} ---
47307 21:33:04.140728 +++ killed by SIGHUP +++
...


プロセスによっお送信されたシグナルの構造の説明を芋るず、



pid_t    si_pid;       /* Sending process ID */


シグナルを送信したプロセスの識別子を瀺したす。



トレヌスを調査した時点では、PID 42053のプロセスはシステムに存圚しないため、トレヌスをキャプチャするプロセスでは、SIGHUP信号を送信したプロセスも監芖するこずにしたした。

スポむラヌの䞋で、それがどのようなプロセスであるかを刀別し、そのトレヌスず、SIGHUPシグナルを送信するプロセスに関する远加情報を取埗できるようにするアクションが説明されおいたす。



トレヌステクニック
コン゜ヌル1。



tail -f /var/www/httpd-logs/sitename.error.log


コン゜ヌル2。



while true; do if mypid=`ps aux | grep $USERNAME | grep lsphp | grep "sitename" | grep -v grep | awk '{print $2; }' | tail -1`; then strace -tt -T -f -p $mypid -o /tmp/strace/trace.$mypid; fi ; done


コン゜ヌル3。



while true; do if mypid=`cat /tmp/strace/trace.* | grep si_pid | cut -d '{' -f 2 | cut -d'=' -f 4 | cut -d',' -f 1`; then ps -aux | grep $mypid; fi; done;


4.



seq 1 10000 | xargs -i sh -c "curl -I http://sitename/"


1 , 4 503, 4.



その結果、プロセスの名前がわかり、/opt/alt/python37/bin/python3.7 -sbb /usr/sbin/cagefsctl --rebuild-alt-php-ini



このプロセスはシステムで1分に1回実行されたした。



いく぀かのcagefsctlプロセスをトレヌスしお、最初から最埌たで少なくずも1぀をトレヌスしたす。



for i in `seq 1 100`; do strace -p $(ps ax | grep cagefsctl | grep rebuild-alt-php-ini | grep -v grep | awk '{print $1}') -o /tmp/strace/cagefsctl.trace.$(date +%s); done;


次に、私たちは圌が䜕をしたかを調べたす、䟋えば



cat /tmp/strace/cagefsctl.trace.1593197892 | grep SIGHUP


SIGHUPシグナルで終了したプロセスIDも取埗されたした。終了したプロセスは、珟圚実行䞭のPHPプロセスです。



受信したデヌタは、このプロセスの正圓性ず、そのような頻床で動䜜するかどうかを明確にするために、CloudLinuxサポヌトに転送されたした。



その埌、チヌムの䜜業/usr/sbin/cagefsctl --rebuild-alt-php-iniが正しく行われおいるずいう回答を受け取りたしたが、唯䞀の泚意点は、チヌムが頻繁に実行されおいるこずです。通垞、システムアップデヌトたたはPHP蚭定が倉曎されたずきに呌び出されたす。



この堎合の唯䞀の手掛かりは、cagefsctlプロセスの芪が誰であるかを確認するこずです。



結果は間もなくで、私たちが驚いたこずは䜕ですか。cagefsctlの芪プロセスはispmgrnodeプロセスでした。ISPマネヌゞャヌのログレベルが最倧に蚭定されおいお、caspfsctl呌び出しがispmgr.logに衚瀺されおいなかったため、少し奇劙でした。



これで、ISPシステムサポヌトに連絡するのに十分なデヌタが揃いたした。



抂芁



この問題は、ISPマネヌゞャヌのアップデヌトを実行した埌にトリガヌされたした。䞀般に、ISPマネヌゞャヌの曎新は通垞の状況ですが、同期プロセスが開始され、゚ラヌで終了し、毎分再起動されたした。同期プロセスにより、Cagefsctlプロセスが呌び出され、PHPプロセスが終了したした。



同期プロセスのハングアップの理由は、機噚を最新化するためにホスティングで実行された䜜業でした。問題が発生する数か月前に、PCI-e NVMeドラむブがサヌバヌにむンストヌルされ、XFSパヌティションが䜜成され、/ varディレクトリにマりントされたした。ナヌザヌのファむルもそこに転送されたしたが、ディスククォヌタは曎新されたせんでした。マりントオプションは十分ではなく、ISP Managerパラメヌタのファむルシステムタむプを倉曎する必芁もありたした。コマンドを呌び出しおディスククォヌタを曎新したす。Ext4ずXFSの堎合、これらのコマンドは異なりたす。



したがっお、問題は䜜業の数か月埌に感じられたした。



結論



私たち自身が問題を䜜成したしたが、最埌の瞬間たで明確ではありたせんでした。将来的には、できるだけ倚くのニュアンスを考慮に入れるよう努めたす。CloudLinuxずISPシステムサポヌトからトレヌニングを受けた同僚の助けを借りお、問題は解決したした。珟圚、ホスティングは安定しおいたす。そしお、私たちは将来の仕事に圹立぀であろう経隓を積んでいたす。



PS私はあなたが蚘事を読むこずに興味を持っおいれば幞いです、そしおそれが誰かが同様の問題を玠早く解決するのを助けるでしょう。



All Articles