标签: PHP

  • 调整 PHP-FPM 以获得超高的服务器性能

    这篇文章提供了一个关于如何通过调整 PHP-FPM 设置来优化服务器内存使用并提高性能的逐步指南。

    步骤 1:确定 PHP-FPM 进程的内存使用情况

    • 运行以下命令以显示按 RSS(常驻集大小,即进程实际使用的物理内存量)排序的 php-fpm 进程:
       ps -ylC php-fpm7.3 --sort:rss 
    • 注意每个 php-fpm 进程使用的内存量(以 KB 或 GB 为单位)。

    步骤 2:估算其他进程的内存消耗

    • 运行 top 命令。
    • 按三次 < 键以按 RES(常驻内存大小)排序。
    • 确定 MySQL 和 Apache 等其他进程使用的内存量。

    步骤 3:为 PHP-FPM 分配内存

    • 根据服务器上的可用内存和步骤 1 和 2 中确定的内存使用情况,为 PHP-FPM 分配一定数量的内存。
    • 例如,如果您可以为 PHP-FPM 分配 2GB 内存,并且每个进程使用 0.15GB,则可以运行大约 13 个子进程 (2 / 0.15 = 13.33)。

    步骤 4:配置 PHP-FPM

    • 打开 PHP-FPM 配置文件:
       sudo nano /etc/php/7.x/fpm/pool.d/www.conf
    • 找到以下设置并根据您的计算结果进行调整:
      • pm = dynamic:将此设置为 dynamic 以允许 PHP-FPM 根据需要动态调整子进程的数量。
      • pm.max_children = 12:设置 PHP-FPM 可以创建的最大子进程数。
      • pm.min_spare_servers = 2:设置空闲状态下保持的最小服务器进程数。
      • pm.max_spare_servers = 4:设置空闲状态下保持的最大服务器进程数。
      • pm.start_servers = 12:设置 PHP-FPM 启动时启动的服务器进程数。
      • pm.max_requests = 500:设置每个子进程在重启之前可以处理的最大请求数,以防止内存泄漏。

    步骤 5:保存并重新启动 PHP-FPM

    • 保存配置文件。
    • 重新启动 PHP-FPM 以使更改生效:
       sudo service php7.3-fpm restart

    步骤 6:监控内存使用情况

    • 在进行更改后,请持续监控服务器的内存使用情况,以确保 PHP-FPM 性能最佳,并且不会导致内存不足的问题。

    在 PHP 8 中,您无法完全关闭垃圾回收(GC)机制。

    PHP 的垃圾回收器是其内存管理的核心部分,对于确保脚本运行时的稳定性和防止内存泄漏至关重要。

    尽管您无法禁用 GC,但您可以通过以下方式影响其行为:

    • gc_disable() 函数: 这个函数可以暂时禁用垃圾回收器的运行。 然而,这并不会阻止 PHP 引擎跟踪引用计数。 一旦 gc_enable() 被调用或者脚本结束,垃圾回收器会重新启动并清理不再需要的变量。
    • 修改 php.ini 配置文件: 您可以调整 zend.enable_gc=Off 来禁用循环引用收集器。 将其设置为 Off 会阻止 PHP 引擎检测和清理循环引用,但这可能会导致潜在的内存泄漏,尤其是在处理大量对象和复杂数据结构时。

    重要提示:

    • 强烈建议不要尝试完全禁用 PHP 的垃圾回收机制。 这样做可能会导致不可预测的行为,包括内存泄漏、性能下降,甚至导致 PHP 进程崩溃。
    • 如果您在脚本运行期间遇到与 GC 相关的性能问题,请先尝试优化代码以减少对象创建和循环引用的数量,而不是尝试禁用 GC。

  • 使用Devilbox简化本地开发:Docker化的PHP堆栈

    Devilbox是一个现代化且高度可定制的PHP开发堆栈,基于Docker运行。它为所有主要操作系统提供可重现和相同的开发环境,无需任何配置。无论您是在开发LAMP还是MEAN堆栈,Devilbox都可以轻松切换和组合所需的版本以供本地开发使用。通过自动创建虚拟主机(vhost)、SSL证书和DNS记录,Devilbox支持无限数量的项目。在本文中,我们将探讨Devilbox的功能以及它如何简化本地开发。

    简单安装和设置:
    安装Devilbox非常简单。只需克隆Devilbox存储库并配置环境文件即可。Devilbox适用于包括Linux、macOS和Windows在内的所有主要操作系统。完成设置后,您可以使用一个命令启动所有容器。

    精确运行所需的内容:
    Devilbox提供了灵活性,可以选择所需的守护程序及其版本。您可以轻松配置Apache、Nginx、PHP、MySQL、MariaDB、Percona、PgSQL、Redis、Memcached、MongoDB等。这样,您可以在开发过程中准确模拟生产环境。

    附加服务和工具:
    除了默认堆栈之外,Devilbox还提供了其他一些可以轻松启用和启动的服务。这些服务包括Python(Flask)、Blackfire、ELK、MailHog、Ngrok、RabbitMQ、Solr、HAProxy、Varnish等等。您可以仅启动所需的容器,并在堆栈运行时添加或删除守护程序。

    邮件拦截和自动DNS:
    Devilbox包含一个内置的postfix邮件服务器,可以拦截所有发出的电子邮件,确保您在开发过程中不会意外发送真实的电子邮件。自动DNS功能会自动为每个项目提供正确的DNS记录,无需手动编辑主机文件。

    用户友好的内部网络和安全性:
    Devilbox配有一个用户友好的内部网络,提供有用的工具,如容器健康监控、DNS状态、可用的虚拟主机、电子邮件、数据库和有效的配置。安全性也是一个重要考虑因素,Devilbox使用官方Docker映像和自定义映像的混合方式。所有集成的容器都可以在GitHub上进行查看。

    始终更新和活跃的社区:
    Devilbox容器经常更新并推送到Docker Hub。您可以轻松拉取最新的映像或重新构建特定的容器以获取最新版本。Devilbox拥有活跃的社区,欢迎贡献、错误报告、功能请求和通过GitHub、论坛和聊天渠道的合作。

    结论:
    Devilbox通过提供可定制和可复现的基于Docker的PHP堆栈简化了本地开发。通过其简单的安装、选择守护程序和版本的灵活性、附加服务和工具、邮件拦截、自动DNS、用户友好的内部网络和活跃的社区支持,Devilbox简化了开发流程,提高了生产效率。无论您是初学者还是经验丰富的开发人员,Devilbox都是创建和管理开发环境的有价值工具。尝试一下,体验轻松的本地开发带来的好处。


    devilbox.org

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网