diff --git a/docs/cn/config.md b/docs/cn/config.md index 850d67fa4f..3745b2693d 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 23b41a8edf..0a74658191 100644 --- a/docs/fr/config.md +++ b/docs/fr/config.md @@ -19,7 +19,7 @@ php_server Un `Caddyfile` plus avancé, activant davantage de fonctionnalités et fournissant des variables d'environnement pratiques, est disponible [dans le dépôt FrankenPHP](https://github.com/php/frankenphp/blob/main/caddy/frankenphp/Caddyfile) et avec les images Docker. -PHP lui-même peut être configuré [en utilisant un fichier `php.ini`](https://www.php.net/manual/fr/configuration.file.php). +PHP lui-même peut être configuré [en utilisant un fichier `php.ini`](https://www.php.net/manual/en/configuration.file.php). Selon votre méthode d'installation, FrankenPHP et l'interpréteur PHP chercheront les fichiers de configuration aux emplacements décrits ci-dessous. @@ -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 : @@ -272,11 +292,11 @@ Les variables d'environnement suivantes peuvent être utilisées pour insérer d Comme pour les SAPI FPM et CLI, les variables d'environnement sont exposées par défaut dans la superglobale `$_SERVER`. -La valeur `S` de [la directive `variables_order` de PHP](https://www.php.net/manual/fr/ini.core.php#ini.variables-order) est toujours équivalente à `ES`, que `E` soit défini ailleurs dans cette directive ou non. +La valeur `S` de [la directive `variables_order` de PHP](https://www.php.net/manual/en/ini.core.php#ini.variables-order) est toujours équivalente à `ES`, que `E` soit défini ailleurs dans cette directive ou non. ## Configuration PHP -Pour charger [des fichiers de configuration PHP supplémentaires](https://www.php.net/manual/fr/configuration.file.php#configuration.file.scan), +Pour charger [des fichiers de configuration PHP supplémentaires](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan), la variable d'environnement `PHP_INI_SCAN_DIR` peut être utilisée. Lorsqu'elle est définie, PHP chargera tous les fichiers avec l'extension `.ini` présents dans les répertoires donnés. @@ -287,7 +307,7 @@ Vous pouvez également modifier la configuration de PHP en utilisant la directiv frankenphp { php_ini memory_limit 256M - # or + # ou php_ini { memory_limit 256M @@ -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 12a54462a6..880d56a1db 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 82d17db493..3c61fcb1e3 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 03d1856d1d..b2bd164fb2 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` без его изменения: diff --git a/docs/tr/config.md b/docs/tr/config.md index 790690199f..b73fe09e4d 100644 --- a/docs/tr/config.md +++ b/docs/tr/config.md @@ -1,6 +1,6 @@ # Konfigürasyon -FrankenPHP, Caddy'nin yanı sıra [Mercure](mercure.md) ve [Vulcain](https://vulcain.rocks) modülleri [Caddy tarafından desteklenen formatlar](https://caddyserver.com/docs/getting-started#your-first-config) kullanılarak yapılandırılabilir. +FrankenPHP, Caddy ile birlikte [Mercure](mercure.md) ve [Vulcain](https://vulcain.rocks) modülleri [Caddy tarafından desteklenen formatlar](https://caddyserver.com/docs/getting-started#your-first-config) kullanılarak yapılandırılabilir. En yaygın format, basit, insan tarafından okunabilir bir metin formatı olan `Caddyfile`'dır. Varsayılan olarak, FrankenPHP mevcut dizinde bir `Caddyfile` arar. Özel bir yol belirtmek için `-c` veya `--config` seçeneğini kullanabilirsiniz. @@ -94,6 +94,7 @@ Ayrıca, FrankenPHP'yi [global seçenek](https://caddyserver.com/docs/caddyfile/ max_threads # Çalışma zamanında başlatılabilecek ek PHP iş parçacığı sayısını sınırlar. Varsayılan: num_threads. 'auto' olarak ayarlanabilir. max_wait_time # Bir isteğin boş bir PHP iş parçacığı bekleme süresinin zaman aşımına uğramadan önceki maksimum süresini ayarlar. Varsayılan: devre dışı. max_idle_time # Otomatik ölçeklenen bir iş parçacığının devre dışı bırakılmadan önce ne kadar süre boş kalabileceğini ayarlar. Varsayılan: 5s. + max_requests # (deneysel) Bir PHP iş parçacığının yeniden başlatılmadan önce işleyeceği maksimum istek sayısını ayarlar, bellek sızıntılarını azaltmak için faydalıdır. Hem normal hem de çalışan iş parçacıkları için geçerlidir. Varsayılan: 0 (sınırsız). php_ini # Bir php.ini yönergesi ayarlar. Birden fazla yönerge ayarlamak için birden fazla kez kullanılabilir. worker { file # Çalışan komut dosyasının yolunu ayarlar. @@ -193,9 +194,9 @@ php_server [] { ### Dosya Değişikliklerini İzleme -Workers yalnızca uygulamanızı bir kez başlatır ve bellekte tutar, bu nedenle PHP dosyalarınızdaki herhangi bir değişiklik hemen yansımaz. +İşçiler yalnızca uygulamanızı bir kez başlatır ve bellekte tutar, bu nedenle PHP dosyalarınızdaki herhangi bir değişiklik hemen yansımaz. -Bunun yerine işçiler, `watch` yönergesi aracılığıyla dosya değişikliklerinde yeniden başlatılabilir. Bu, geliştirme ortamları için kullanışlıdır. +İşçiler, `watch` yönergesi aracılığıyla dosya değişikliklerinde yeniden başlatılabilir. Bu, geliştirme ortamları için kullanışlıdır. ```caddyfile { @@ -252,6 +253,20 @@ Geleneksel PHP uygulamalarında, betikler her zaman public dizininde bulunur. Bu } ``` +## İstek Sayısından Sonra İş Parçacıklarını Yeniden Başlatma (Deneysel) + +FrankenPHP, PHP iş parçacıklarını belirli bir sayıda isteği işledikten sonra otomatik olarak yeniden başlatabilir. Bir iş parçacığı limite ulaştığında, tüm belleği ve durumu temizleyerek tamamen yeniden başlatılır. Diğer iş parçacıkları yeniden başlatma sırasında istekleri işlemeye devam eder. + +Zamanla bellek kullanımının arttığını fark ederseniz, ideal çözüm sızıntıyı sorumlu uzantı veya kütüphane geliştiricisine bildirmektir. Ancak çözüm, kontrol edemediğiniz bir üçüncü tarafa bağlı olduğunda, `max_requests` üretim için pratik ve umarız geçici bir çözüm sunar: + +```caddyfile +{ + frankenphp { + max_requests 500 + } +} +``` + ## Ortam Değişkenleri Aşağıdaki ortam değişkenleri `Caddyfile` içinde değişiklik yapmadan Caddy yönergelerini entegre etmek için kullanılabilir: @@ -263,7 +278,7 @@ Aşağıdaki ortam değişkenleri `Caddyfile` içinde değişiklik yapmadan Cadd FPM ve CLI SAPI'lerinde olduğu gibi, ortam değişkenleri varsayılan olarak `$_SERVER` süper globalinde gösterilir. -[`variables_order`'a ait PHP yönergesinin](https://www.php.net/manual/en/ini.core.php#ini.variables-order) `S` değeri bu yönergede `E`'nin başka bir yere yerleştirilmesinden bağımsız olarak her zaman `ES` ile eş değerdir. +[`variables_order` PHP yönergesinin](https://www.php.net/manual/en/ini.core.php#ini.variables-order) `S` değeri bu yönergede `E`'nin başka bir yere yerleştirilmesinden bağımsız olarak her zaman `ES` ile eş değerdir. ## PHP konfigürasyonu