标签: PHP

  • 高性能WordPress站优化技巧

    基于对本站和几个WordPress站的持续优化,有以下的技巧值得尝试:

    • PHP的pm模式切换到 ondemand 比dynamic模式快,而且不会出现卡顿;由于进程创建和退出更加积极,内存泄露也不会出问题。
    • 关闭PHP的gc,对于ondemand模式来说,GC几乎没有必要;
    • 开启sqlite object cache插件,这个插件很简单和快速;
    • 采用caddy 2 server,高性能的http/3协议支持,网站持续交互的响应延迟大大降低;
    • 定期优化MySQL的索引,尤其没有频繁写入请求的表,一定要把索引加足;
    • 插件尽可能少,尤其是缓存插件,开启object cache就足够了,浏览器页面缓存可以不开;
    • PHP 的JIT一定要打开,能快很多;
  • 深入理解 PHP-FPM:全面指南

    引言

    PHP 作为 Web 开发中最流行的服务端脚本语言,在网站和 Web 应用日益复杂和需求量不断增长的今天,开发者们一直在寻求优化 PHP 性能和效率的方法。PHP-FPM (FastCGI 进程管理器) 作为一种高效的 PHP FastCGI 实现方案应运而生。本文将深入探讨 PHP-FPM 的世界,了解其功能、优势以及如何显著提升基于 PHP 应用的性能。

    1. 什么是 PHP-FPM?

    PHP-FPM 是一种替代性的 PHP FastCGI 实现,旨在克服传统 PHP-CGI (通用网关接口) 的局限性。它作为进程管理器,独立于 Web 服务器管理 PHP 进程并处理 PHP 请求。通过这种方式,它可以高效地并发处理多个 PHP 请求,从而显著减少延迟并提高整体性能。

    2. PHP-FPM 的优势

    2.1 提升性能

    PHP-FPM 的主要目标是提高基于 PHP 应用的性能。通过维护独立的 PHP 工作进程,它可以更高效地处理大量并发请求。这种方法显著减少了响应时间,使 Web 应用更加灵敏,提升用户体验。

    2.2 资源效率

    PHP-FPM 可以更有效地管理资源。由于它作为进程管理器运行,因此可以根据服务器资源和传入请求负载控制活动 PHP 进程的数量。这可以防止资源浪费并优化服务器性能,从而使用更少的资源服务更多用户。

    2.3 稳定性和隔离性

    PHP-FPM 为运行 PHP 应用提供了一个稳定、安全的环境。如果一个 PHP 进程遇到错误或变得无响应,它不会影响其他活动进程。这种隔离性确保了单个请求的隔离,不会影响整体系统稳定性。

    2.4 可定制的池配置

    开发者可以微调 PHP-FPM 的池配置,以满足其应用的特定需求。配置参数包括子进程数量、每个子进程可以处理的最大请求数以及其他设置,可以根据不同的场景进行调整,以获得最佳性能。

    3. PHP-FPM 工作原理

    PHP-FPM 与 Web 服务器(例如 Nginx 或 Apache)协同工作。当收到 PHP 请求时,Web 服务器将其转发给 PHP-FPM 进程管理器,然后 PHP-FPM 通过子进程池处理该请求。这些子进程是 PHP 的独立实例,每个实例都能够独立处理单个请求。

    4. 配置 PHP-FPM

    配置 PHP-FPM 会显著影响 Web 应用的性能。根据服务器硬件和预期流量优化设置至关重要。常见的配置参数包括:

    4.1. pm_max_children

    此设置确定允许同时运行的最大子进程数。设置适当的值可确保有效利用资源,而不会导致内存问题。

    4.2. pm_max_requests

    pm_max_requests 参数控制每个子进程在回收之前可以处理的请求数。定期回收进程有助于缓解长时间运行的 PHP 应用中的内存泄漏。

    4.3. pm_process_idle_timeout

    此设置指定子进程在终止之前可以保持空闲状态的时间。当资源未积极服务请求时,它有助于释放资源。

    5. PHP-FPM 与虚拟主机

    在单个服务器上托管多个网站或 Web 应用时,虚拟主机是一种常见做法。PHP-FPM 在虚拟主机环境中起着至关重要的作用,因为它允许不同的网站运行独立的 PHP-FPM 池,确保站点之间的隔离和安全性。

    6. 结论

    毫无疑问,PHP-FPM 是基于 PHP 的 Web 开发领域的游戏规则改变者。它能够高效地管理 PHP 进程,加上其资源优化、稳定性和定制选项,使其成为希望提高 Web 应用性能的开发人员的首选。通过选择 PHP-FPM,开发人员可以为用户提供更快、响应更迅速的 Web 体验。

    常见问题解答 (FAQ)

    1. PHP-FPM 是否兼容 Nginx 和 Apache Web 服务器?

    是的,PHP-FPM 兼容 Nginx 和 Apache Web 服务器。它可以与这些服务器无缝集成,以提高 PHP 的性能。

    2. PHP-FPM 是否适用于 PHP 7 以外的 PHP 版本?

    是的,PHP-FPM 兼容 PHP 5.3 及更高版本。但是,建议使用最新的稳定 PHP 8版本以获得更好的性能和安全性。

    3. PHP-FPM 是否可以在共享主机环境中使用?

    是的,PHP-FPM 可以在共享主机环境中使用,在共享主机环境中,多个用户共享相同的服务器资源。它可以改进资源管理并提高 PHP 应用的整体性能。

    4. PHP-FPM 和 PHP-CGI 之间的主要区别是什么?

    主要区别在于它们处理 PHP 请求的方式。PHP-FPM 作为进程管理器运行,而 PHP-CGI 独立执行每个 PHP 请求。PHP-FPM 中的这种进程管理方法提供了更好的性能和资源利用率。

    5. 如何检查我的服务器上是否正在运行 PHP-FPM?

    要检查您的服务器上是否正在运行 PHP-FPM,可以使用以下命令:ps aux | grep php-fpm。如果已正确安装并运行,这将显示正在运行的 PHP-FPM 进程。

  • 调整 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

  • Laradock:简化PHP开发环境的利器

    Laradock 是一个为 Docker 提供的全功能 PHP 开发环境,它支持多种常用服务的快速配置,为 PHP 开发者提供了一个便捷的开发环境。Laradock 的设计初衷是让开发者能够快速切换不同版本的 PHP、选择自己喜欢的数据库引擎,并且可以轻松运行各种常用的服务。

    Laradock 的特点如下:

    1. 轻松切换 PHP 版本:支持 PHP 8.1、8.0、7.4、7.3、7.2、7.1、5.6 等多个版本。
    2. 多种数据库引擎:支持 MySQL、Postgres、MariaDB 等常用数据库引擎。
    3. 自定义开发栈:支持 Memcached、HHVM、RabbitMQ 等各种常用服务。
    4. 每个软件运行在独立的容器中:PHP-FPM、NGINX、PHP-CLI 等软件都在自己的容器中运行。
    5. 容器定制化简单:可以通过简单地编辑 Dockerfile 来自定义任何容器。
    6. 基于官方基础镜像:所有镜像都是基于官方的基础镜像构建的,安全可靠。
    7. 预配置的 NGINX:预配置 NGINX 以托管根目录下的任何代码。
    8. 支持单个项目或多个项目:可以为每个项目单独使用 Laradock,也可以为所有项目共用一个 Laradock。
    9. 通过环境变量轻松安装/移除容器中的软件。
    10. 清晰、结构良好的 Dockerfile。
    11. 最新版本的 Docker Compose 文件。
    12. 所有内容可见且可编辑。
    13. 快速构建镜像。

    快速入门:
    让我们看看如何轻松设置我们的演示堆栈:PHP、NGINX、MySQL、Redis 和 Composer。

    1. 在你的 PHP 项目中克隆 Laradock:
    git clone https://github.com/Laradock/laradock.git
    1. 进入 laradock 文件夹,将 .env.example 重命名为 .env:
    cd laradock
    mv .env.example .env
    1. 运行容器:
    docker-compose up -d nginx mysql phpmyadmin redis workspace
    1. 打开项目的 .env 文件,并设置以下内容:
    DB_HOST=mysql
    REDIS_HOST=redis
    QUEUE_HOST=beanstalkd
    1. 在浏览器中访问 localhost:http://localhost。就是这样,尽情享受吧!

    Laradock 支持的服务:
    Laradock 遵循关注点分离原则,因此它将每个软件运行在自己的 Docker 容器中。你可以根据需要启动/关闭任意数量的实例,而不必担心配置的问题。要运行下面列表中的容器,请使用 docker-compose up -d {container-name} 命令。

    Web 服务器:

    • NGINX
    • Apache2
    • Caddy

    负载均衡器:

    • HAProxy
    • Traefik

    PHP 编译器:

    • PHP FPM
    • HHVM

    数据库管理系统:

    • MySQL
    • PostgreSQL
    • PostGIS
    • MariaDB
    • Percona
    • MSSQL
    • MongoDB
    • MongoDB Web UI
    • Neo4j
    • CouchDB
    • RethinkDB
    • Cassandra

    数据库管理应用:

    • PhpMyAdmin
    • Adminer
    • PgAdmin

    缓存引擎:

    • Redis
    • Redis Web UI
    • Redis Cluster
    • Memcached
    • Aerospike
    • Varnish

    消息代理:

    • RabbitMQ
    • RabbitMQ Admin Console
    • Beanstalkd
    • Beanstalkd Admin Console
      Eclipse Mosquitto

    laradock

    laradock/README-zh.md at master · laradock/laradock (github.com)

人生梦想 - 关注前沿的计算机技术 acejoy.com