Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHPのプロセス制御について
Search
Haruki Tazoe
July 26, 2025
75
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPのプロセス制御について
https://hiroshimaphp.connpass.com/event/344543/
Haruki Tazoe
July 26, 2025
More Decks by Haruki Tazoe
See All by Haruki Tazoe
クロスアカウント環境におけるAWS S3バケットへのアクセスで詰まっていた
jdkfx
0
94
ちょっとした「翻訳ブーム」はこうして始まった
jdkfx
0
410
フロントエンドのチューニングに挑戦してみる
jdkfx
0
210
ドキュメント翻訳で学ぶ新しい言語仕様・機能
jdkfx
1
550
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / phpcon-2021
jdkfx
2
1.3k
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
690
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
850
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
240
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Unsuck your backbone
ammeep
672
58k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Joys of Absence: A Defence of Solitary Play
codingconduct
1
500
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Transcript
PHPのプロセス制御について 2025/07/26 PHP勉強会in広島 vol.4 田添春樹
それはある日突然に
受注の取得処理が止まる - 受注管理システムへ自動で受注を取り込む処理が止まっているとの情報が... - 受注を取得する処理において、プロセスが長時間実行されていたため、 最大プロセス数まで追い越してしまったのではないかと考えられる
目的 - 実際に手元で同じような環境をシンプルな形で構築する - ハングの検知とプロセスキルを行う処理を書いて、プロセスの滞留について 理解する
実装してみる
バッチ処理管理システムの実装 - https://github.com/jdkfx/process-manager - 同時に最大$maxProcesses 個までプロセスを 並列実行する - 子プロセスの実行時間を監視し、 時間がかかりすぎたものにはアラートや
強制終了を行う
プロセス管理クラスにおけるプロパティ - $maxProcesses 同時に実行できるプロセス数の上限 - $children 現在実行中の子プロセスのPID一覧 - $startTimes 子プロセスの開始時刻(監視用)
- $timeoutSeconds タイムアウトの閾値
タスクの実行 1. 各$task を順番に処理 2. 現在のプロセス数が上限を超えている場合は待機 waitForChild(); や checkTimeouts(); 3.
pcntl_fork(); で子プロセスを生成 - 子プロセス:$task->execute(); を実行し、終了 - 親プロセス:子プロセスの PID を記録 4. すべての子プロセスが終了するまで監視 monitorProcesses();
None
プロセスの待機 - waitForChild(); - 非同期で子プロセスの終了を待つ - 終了したらリストから削除 - 終了したプロセスがなければsleep(1); で1秒待機
- checkTimeouts(); - それぞれの子プロセスの実行時間を確認 - タイムアウト時間を過ぎていたらSTDERR に警告を出力 - ただし、プロセスの終了やkillはここではしない
None
プロセスの監視 - monitorProcesses(); - 実行時間に応じてアラートを出す: 10秒超 → 黄色 20秒超 →
マゼンタ 30秒超 → 赤色 + 強制終了 posix_kill(); - pcntl_waitpid(); で終了した子プロセスを回収・削除
None
実行してみる - 13、14、15のプロセスが並列実行 - 13、14に関しては処理がすぐに終わり 設定したタイムアウト値を超えずアラートが 出ていない - 15が30秒以上かかり、設定した10秒という タイムアウト値を超え始めたところから
アラートが出る - 最終的に30秒の時点で強制的にプロセスを キルされる
プロセスをキルできない場合は? - 高負荷な処理中に最大プロセス数まで追いついてしまい、 子プロセスをforkできず、長時間の滞留後にハングしてしまう (ハングしているように見えてみる) - 子プロセスに以下を実装して対処できる可能性がある - 子プロセスにタイムアウト処理を埋め込み -
子プロセスがexit()されない場合は、exit()されているか 確認するようにログを残す - リトライやバックオフの実装
再度、処理を行う
リトライとバックオフ - リトライ - 失敗した処理をもう一度やり直す - 一時的な失敗(タイムアウト、接続エラー、リソースの過負荷) に対して、再試行する - バックオフ
- リトライをすぐには行わず、時間をおいてから行うこと - サーバーや処理対象が一時的に混み合っている/不安定な時に 少し時間を開けて再試行することで成功率を上げる - 短時間で何度もアクセスしてサーバーをさらに重くしないようにする (所謂DoSを防ぐ)
リトライとバックオフ - Pros - ネットワークや外部リソースなどによる失敗を回避できる (DB接続やAPIエラー) - 高負荷時に連続処理によるリソース圧迫を緩和できる - 異常終了した処理を再試行することで、処理の信頼性が上がる
- Cons - 処理時間が伸びてしまい、リソース消費が伸び続けてしまう - 単純に処理がわかりにくくなる
自己紹介 - 名前・所属 - 田添春樹 / @jdkfx - 株式会社GoQSystem -
よく使う技術 ( 使っていた技術 ) - PHP, JavaScript, Vue.js, Svelte … - PHPとは学生時代に出会う - 個人開発や自作フレームワークの制作 - 最近はAWSにハマってる
ご清聴ありがとう ございました!