diff --git a/docs/cn/config.md b/docs/cn/config.md index 78d440f2c0..47103e7a8a 100644 --- a/docs/cn/config.md +++ b/docs/cn/config.md @@ -94,6 +94,7 @@ localhost { max_threads # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。 max_wait_time # 设置请求在超时之前可以等待的最大时间,直到找到一个空闲的 PHP 线程。 默认:禁用。 max_idle_time # 设置一个自动扩展的线程在被停用之前可以空闲的最长时间。默认:5s。 + max_requests # (实验性) 设置一个 PHP 线程在重启前将处理的最大请求数,这有助于缓解内存泄漏问题。适用于常规线程和 worker 线程。默认值:0 (无限制)。 php_ini # 设置一个 php.ini 指令。可以多次使用以设置多个指令。 worker { file # 设置工作脚本的路径。 @@ -260,6 +261,23 @@ Workers 可以通过 `watch` 指令在文件更改时重新启动。 } ``` +## 在处理一定数量请求后重启线程 (实验性) + +FrankenPHP 可以在 PHP 线程处理完给定数量的请求后自动重启它们。 +当一个线程达到限制时,它会被完全重启,清除所有内存和状态。 +在重启期间,其他线程会继续处理请求。 + +如果你注意到内存随着时间增长,理想的解决方案是将泄漏报告给负责的扩展或库维护者。 +但是,当修复依赖于你无法控制的第三方时,`max_requests` 提供了一个务实且有望临时的生产环境解决方案: + +```caddyfile +{ + frankenphp { + max_requests 500 + } +} +``` + ## 环境变量 可以使用以下环境变量在不修改 `Caddyfile` 的情况下注入 Caddy 指令: diff --git a/docs/fr/config.md b/docs/fr/config.md index 241f2632f9..467f87b527 100644 --- a/docs/fr/config.md +++ b/docs/fr/config.md @@ -96,6 +96,7 @@ Vous pouvez également configurer explicitement FrankenPHP en utilisant l'[optio max_threads # Limite le nombre de threads PHP supplémentaires qui peuvent être démarrés au moment de l'exécution. Valeur par défaut : num_threads. Peut être mis à 'auto'. max_wait_time # Définit le temps maximum pendant lequel une requête peut attendre un thread PHP libre avant d'être interrompue. Valeur par défaut : désactivé. max_idle_time # Définit le temps maximum pendant lequel un thread auto-dimensionné peut être inactif avant d'être désactivé. Par défaut : 5s. + max_requests # (expérimental) Définit le nombre maximum de requêtes qu'un thread PHP traitera avant d'être redémarré, utile pour atténuer les fuites de mémoire. S'applique aux threads réguliers et aux threads worker. Par défaut : 0 (illimité). php_ini # Définit une directive php.ini. Peut être utilisé plusieurs fois pour définir plusieurs directives. worker { file # Définit le chemin vers le script worker. @@ -146,7 +147,7 @@ other.example.com { ``` L'utilisation de la directive `php_server` est généralement ce dont vous avez besoin, -mais si vous avez besoin d'un contrôle total, vous pouvez utiliser la sous-directive `php`. +mais si vous avez besoin d'un contrôle total, vous pouvez utiliser la directive de niveau inférieur `php`. La directive `php` transmet toutes les entrées à PHP, au lieu de vérifier d'abord si c'est un fichier PHP ou pas. En savoir plus à ce sujet dans la [documentation liée aux performances](performance.md#try_files). @@ -261,6 +262,25 @@ et transmettra sinon la requête au worker correspondant au modèle de chemin. } ``` +## Redémarrage des Threads après un certain nombre de requêtes (Expérimental) + +FrankenPHP peut redémarrer automatiquement les threads PHP après qu'ils aient géré un certain nombre de requêtes. +Lorsqu'un thread atteint la limite, il est entièrement redémarré, +nettoyant toute la mémoire et l'état. Les autres threads continuent de servir les requêtes pendant le redémarrage. + +Si vous constatez que la mémoire augmente au fil du temps, la solution idéale est de signaler la fuite +au mainteneur de l'extension ou de la bibliothèque responsable. +Mais lorsque la solution dépend d'un tiers que vous ne contrôlez pas, +`max_requests` offre une solution pragmatique et, espérons-le, temporaire pour la production : + +```caddyfile +{ + frankenphp { + max_requests 500 + } +} +``` + ## Variables d'environnement Les variables d'environnement suivantes peuvent être utilisées pour insérer des directives Caddy dans le `Caddyfile` sans le modifier : @@ -417,4 +437,4 @@ Add-Content -Path $PROFILE -Value '. (Join-Path (Split-Path $PROFILE) "frankenph Vous devrez démarrer un nouveau shell pour que cette configuration prenne effet. -Vous devrez ensuite démarrer un nouveau shell pour que cette configuration prenne effet. +Vous devrez démarrer un nouveau shell pour que cette configuration prenne effet. diff --git a/docs/ja/config.md b/docs/ja/config.md index c92cef1ffa..52b92fe26d 100644 --- a/docs/ja/config.md +++ b/docs/ja/config.md @@ -96,6 +96,7 @@ FrankenPHPは、`frankenphp`の[グローバルオプション](https://caddyser max_threads # 実行時に追加で開始できるPHPスレッドの最大数を制限します。デフォルト: num_threads。 'auto'を設定可能。 max_wait_time # リクエストがタイムアウトする前にPHPのスレッドが空くのを待つ最大時間を設定します。デフォルト: 無効。 max_idle_time # 自動スケーリングされたスレッドが非アクティブ化されるまでにアイドル状態である最大時間を設定します。デフォルト: 5秒。 + max_requests # (実験的) PHPスレッドが再起動されるまでに処理するリクエストの最大数を設定します。メモリリークの軽減に役立ちます。通常スレッドとワーカースレッドの両方に適用されます。デフォルト: 0 (無制限)。 php_ini # php.iniのディレクティブを設定します。複数のディレクティブを設定するために何度でも使用できます。 worker { file # ワーカースクリプトのパスを設定します。 @@ -264,6 +265,20 @@ PHPファイルに変更を加えても即座には反映されません。 } ``` +## リクエスト数によるスレッドの再起動 (実験的) + +FrankenPHPは、PHPスレッドが特定のリクエスト数を処理した後、自動的に再起動できます。スレッドが制限に達すると、すべてのメモリと状態をクリーンアップして完全に再起動されます。再起動中も他のスレッドはリクエストの処理を継続します。 + +時間経過とともにメモリが増加していることに気づいた場合、理想的な解決策は、責任ある拡張機能またはライブラリのメンテナにリークを報告することです。しかし、修正が制御できないサードパーティに依存する場合、`max_requests`は本番環境向けの現実的で一時的な回避策として役立ちます。 + +```caddyfile +{ + frankenphp { + max_requests 500 + } +} +``` + ## 環境変数 以下の環境変数を使用することで、`Caddyfile`を直接変更せずにCaddyディレクティブを注入できます: diff --git a/docs/pt-br/config.md b/docs/pt-br/config.md index a05b00f648..6d0fe633e8 100644 --- a/docs/pt-br/config.md +++ b/docs/pt-br/config.md @@ -97,6 +97,7 @@ Você também pode configurar explicitamente o FrankenPHP usando a [opção glob max_threads # Limita o número de threads PHP adicionais que podem ser iniciadas em tempo de execução. Padrão: num_threads. Pode ser definido como 'auto'. max_wait_time # Define o tempo máximo que uma requisição pode esperar por uma thread PHP livre antes de atingir o tempo limite. Padrão: desabilitado. max_idle_time # Define o tempo máximo que uma thread autoescalada pode ficar ociosa antes de ser desativada. Padrão: 5s. + max_requests # (experimental) Define o número máximo de requisições que uma thread PHP irá processar antes de ser reiniciada, útil para mitigar vazamentos de memória. Aplica-se a threads regulares e de worker. Padrão: 0 (ilimitado). php_ini # Define uma diretiva php.ini. Pode ser usada várias vezes para definir múltiplas diretivas. worker { file # Define o caminho para o script do worker. @@ -265,6 +266,25 @@ e, caso contrário, encaminhará a requisição para o worker que corresponde ao } ``` +## Reiniciando Threads Após Um Número de Requisições (Experimental) + +FrankenPHP pode reiniciar automaticamente as threads PHP depois que elas tiverem manipulado um determinado número de requisições. +Quando uma thread atinge o limite, ela é totalmente reiniciada, +limpando toda a memória e estado. Outras threads continuam a servir requisições durante o reinício. + +Se você notar o consumo de memória aumentando com o tempo, a correção ideal é reportar o vazamento +ao mantenedor da extensão ou biblioteca responsável. +Mas quando a correção depende de um terceiro que você não controla, +`max_requests` oferece uma solução pragmática e, esperançosamente, temporária para produção: + +```caddyfile +{ + frankenphp { + max_requests 500 + } +} +``` + ## Variáveis de ambiente As seguintes variáveis de ambiente podem ser usadas para injetar diretivas Caddy no `Caddyfile` sem modificá-lo: @@ -421,5 +441,3 @@ Add-Content -Path $PROFILE -Value '. (Join-Path (Split-Path $PROFILE) "frankenph ``` Você precisará iniciar um novo shell para que esta configuração tenha efeito. - -Você precisará iniciar um novo shell para que esta configuração tenha efeito. diff --git a/docs/ru/config.md b/docs/ru/config.md index 232ab16fcd..f2feb60489 100644 --- a/docs/ru/config.md +++ b/docs/ru/config.md @@ -96,6 +96,7 @@ localhost { max_threads # Ограничивает количество дополнительных потоков PHP, которые могут быть запущены во время выполнения. По умолчанию: num_threads. Может быть установлено в 'auto'. max_wait_time # Устанавливает максимальное время, в течение которого запрос может ожидать свободный поток PHP до истечения таймаута. По умолчанию: отключено. max_idle_time # Устанавливает максимальное время бездействия автоматически масштабируемого потока до его деактивации. По умолчанию: 5s. + max_requests # (экспериментально) Устанавливает максимальное количество запросов, которое PHP-поток обработает до перезапуска, полезно для смягчения утечек памяти. Применяется как к обычным, так и к worker-потокам. По умолчанию: 0 (без ограничений). php_ini # Устанавливает директиву php.ini. Может использоваться несколько раз для установки нескольких директив. worker { file # Устанавливает путь к worker-скрипту. @@ -184,7 +185,7 @@ php_server [] { file_server off # Отключает встроенную директиву file_server. worker { # Создает worker, специфичный для этого сервера. Может быть указано несколько раз для нескольких workers. file # Устанавливает путь к worker-скрипту, может быть относительным к корню php_server - num # Устанавливает количество запускаемых потоков PHP, по умолчанию 2x от числа доступных CPU. + num # Устанавливает количество запускаемых потоков PHP, по умолчанию 2x от числа доступных name # Устанавливает имя для worker, используемое в логах и метриках. По умолчанию: абсолютный путь к файлу worker. Всегда начинается с m# при определении в блоке php_server. watch # Устанавливает путь для отслеживания изменений файлов. Может быть указано несколько раз для нескольких путей. env # Устанавливает дополнительную переменную окружения с заданным значением. Может быть указано несколько раз для нескольких переменных окружения. Переменные окружения для этого worker также наследуются от родительского php_server, но могут быть переопределены здесь. @@ -264,6 +265,20 @@ php_server [] { } ``` +## Перезапуск потоков после определенного количества запросов (экспериментально) + +FrankenPHP может автоматически перезапускать PHP-потоки после того, как они обработают заданное количество запросов. Когда поток достигает предела, он полностью перезапускается, очищая всю память и состояние. Другие потоки продолжают обслуживать запросы во время перезапуска. + +Если вы замечаете рост потребления памяти со временем, идеальное решение — сообщить об утечке ответственным разработчикам расширения или библиотеки. Но когда исправление зависит от сторонней организации, которую вы не контролируете, `max_requests` предлагает прагматичное и, надеемся, временное решение для продакшена: + +```caddyfile +{ + frankenphp { + max_requests 500 + } +} +``` + ## Переменные окружения Следующие переменные окружения могут быть использованы для внедрения директив Caddy в `Caddyfile` без его изменения: