Deprecated
: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in
/www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php
on line
1057
首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
8
篇与
的结果
2023-12-30
php-fpm应该如何优化,以及如何配置
php-fpm应该如何优化,以及如何配置PHP-FPM(PHP FastCGI Process Manager)是一种用于管理运行PHP的FastCGI进程的工具。它可以提高服务器的性能和稳定性,同时也能够更好地管理和调整PHP进程的操作。本文将着重介绍如何优化和配置PHP-FPM,以更好地适应服务器的需求。在进行配置之前,确保已经安装了PHP-FPM,并且熟悉了PHP和Nginx的基本知识。首先,我们需要修改PHP-FPM的主要配置文件php-fpm.conf。在这个文件中,有一些关键的参数需要关注和调整。user和group:这两个参数用于指定PHP-FPM所运行的用户和用户组。建议将其设置为和Nginx所用的用户和组相同,以避免权限问题。listen:该参数指定了PHP-FPM进程监听的地址和端口。默认情况下,它会监听本地的一个Unix Socket文件,可以通过将其修改为监听IP地址和端口的方式来提高性能。例如,listen = 127.0.0.1:9000。pm:这是一个很重要的参数,用于设置PHP-FPM的进程管理方式。默认值是static,即静态方式,每个PHP-FPM进程在启动时都会预先分配,不会根据负载情况动态调整。建议使用dynamic方式,让PHP-FPM根据当前负载来动态创建和销毁进程。例如,pm = dynamic。pm.max_children:在使用dynamic方式时,该参数用于设置最大的PHP-FPM子进程数量。一般来说,根据服务器的资源情况和预期负载来调整该值。请注意,设置过大的值可能导致服务器的内存不足。pm.start_servers和pm.min_spare_servers、pm.max_spare_servers:这三个参数用于设置PHP-FPM的初始子进程数量、最小空闲子进程数量和最大空闲子进程数量。这些值的设置应该基于服务器的资源情况和预估的并发请求量。合理的设置将使PHP-FPM能够及时响应请求,同时也能够减少不必要的资源消耗。request_terminate_timeout和request_slowlog_timeout:这两个参数用于设置请求超时时间和慢请求记录的时间。合理设置超时时间可以避免请求过于耗时,而慢请求记录可以帮助我们发现和优化响应时间过长的问题。除了php-fpm.conf,PHP-FPM还有一个重要的配置文件pool.d/www.conf。这个文件定义了对特定PHP应用程序的处理规则和配置。在进行配置之前,我们需要先了解一下PHP-FPM的一个关键概念:PHP-FPM进程池。一个PHP-FPM进程池对应一个PHP应用程序,可以在不同的虚拟主机或目录中使用。在配置文件pool.d/www.conf中,我们可以根据实际需求对每个进程池进行单独的配置。下面是一个示例的www.conf配置文件,带有详细注释:[www] ; 进程池的名称,用于区分不同的PHP应用程序 ; 在配置Nginx时,需要与location中的fastcgi_pass指令相对应 ; 例如,fastcgi_pass unix:/var/run/php-fpm.sock 那么pool的名称就是www ; 也可以根据实际需求进行自定义 ; 默认为www(systemd下的php-fpm默认进程池) listen = 127.0.0.1:9000 ; 用户和组 user = nginx group = nginx ; 启用的进程管理方式 pm = dynamic ; 最大子进程数量 pm.max_children = 50 ; 初始子进程数量 pm.start_servers = 5 ; 最小空闲子进程数量 pm.min_spare_servers = 2 ; 最大空闲子进程数量 pm.max_spare_servers = 10 ; 请求超时时间 request_terminate_timeout = 60s ; 慢请求记录时间 request_slowlog_timeout = 10s ; 慢请求记录的文件位置 slowlog = /var/log/php-fpm/www-slow.log ; PHP-FPM进程池的环境变量 ; 根据实际需要设置 env[APP_ENV] = development在配置完以上参数后,我们可以重新启动PHP-FPM,并观察日志和服务器的资源使用情况,以确认任何额外的优化细节和调整需求。要记住的是,优化和配置是一项不断迭代的过程,需要根据实际情况进行调整和持续改进。在本文中,我们详细介绍了如何通过优化和配置PHP-FPM来提高服务器的性能和稳定性。通过修改php-fpm.conf和www.conf两个关键配置文件,我们可以根据服务器的资源情况和负载需求来调整PHP-FPM的参数。这样,PHP-FPM就能更好地适应服务器的需求,并提供出色的性能和可靠性。
2023年12月30日
10 阅读
0 评论
0 点赞
2023-12-30
php-fpm 如何进程守护,保证进程不死?
php-fpm 如何进程守护,保证进程不死?PHP-FPM 是一个用于处理 PHP 脚本的 FastCGI 进程管理器。它可以与 Nginx、Apache 或其他支持 FastCGI 协议的 Web 服务器配合使用。在实际部署中,有时我们需要保证 PHP-FPM 进程的稳定运行,确保进程不会意外终止。本文将详细介绍如何对 PHP-FPM 进行进程守护,以保证进程的稳定性。一、常见问题及原因在使用 PHP-FPM 时,可能会遇到进程意外终止的情况。以下是一些常见的问题及其原因:进程崩溃:PHP-FPM 进程在处理请求时崩溃或出现严重错误,导致进程非正常退出。资源耗尽:由于配置不当或程序错误,PHP-FPM 进程消耗过多的系统资源,例如内存或文件描述符,导致进程被系统杀死。意外退出:服务器故障或其他意外情况导致 PHP-FPM 进程非正常退出。为了解决以上问题,我们需要对 PHP-FPM 进程进行进程守护,确保进程的稳定运行。二、使用 systemd 进行进程守护在支持 systemd 的 Linux 系统上,可以使用 systemd 进行 PHP-FPM 进程守护。1. 编辑 PHP-FPM systemd 配置文件$ sudo vi /etc/systemd/system/php-fpm.service在该文件中,添加以下内容:[Unit] Description=PHP FastCGI Process Manager After=network.target [Service] ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf [Install] WantedBy=multi-user.target上述配置中,ExecStart 指定了 PHP-FPM 的启动命令,--nodaemonize 参数表示不使用守护进程模式,--fpm-config 参数指定了 PHP-FPM 的配置文件路径。2. 启动 PHP-FPM 服务:$ sudo systemctl start php-fpm3. 设置 PHP-FPM 服务开机自启动:$ sudo systemctl enable php-fpm通过上述配置,PHP-FPM 进程将作为一个 systemd 服务在后台运行,即使进程意外退出,systemd 会自动重启进程,保证进程的稳定性。三、使用 Supervisor 进行进程守护除了 systemd,还可以使用 Supervisor 进行 PHP-FPM 进程守护。Supervisor 是一个用于管理和监控进程的工具,可用于确保进程持续运行。1. 安装 Supervisor:$ sudo apt-get install supervisor2. 创建 PHP-FPM 的 Supervisor 配置文件:$ sudo vi /etc/supervisor/conf.d/php-fpm.conf在该文件中,添加以下内容:[program:php-fpm] command=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf autostart=true autorestart=true startretries=3 user=nobody redirect_stderr=true上述配置中,command 指定了 PHP-FPM 的启动命令,--nodaemonize 参数表示不使用守护进程模式,--fpm-config 参数指定了 PHP-FPM 的配置文件路径。autostart 和 autorestart 分别表示是否开机自动启动和进程意外退出时是否自动重启。3. 启动 Supervisor 服务:$ sudo systemctl start supervisor4. 启动 PHP-FPM 进程:$ sudo supervisorctl start php-fpm通过以上配置,Supervisor 会监控 PHP-FPM 进程,如果进程意外退出,Supervisor 会自动重启进程,以保证进程的稳定性。结语通过对 PHP-FPM 进程进行进程守护,我们可以确保进程的稳定运行,避免进程意外退出。本文介绍了使用 systemd 和 Supervisor 两种方法进行进程守护,并提供了详细的配置命令。根据实际需求和环境,选择适合的方法进行进程守护,可以提高 PHP-FPM 进程的可靠性和稳定性。
2023年12月30日
11 阅读
0 评论
0 点赞
2023-08-10
一行代码就将你的PHP-FPM内存占用降低至少一半
一行代码就将你的PHP-FPM内存占用降低至少一半PHP-FPM是PHP的FastCGI过程管理器。在类Unix操作系统(包括Linux以及BSD系统)中,PHP-FPM通过安装php5-fpm(Linux)或者php56-fpm(FreeBSD 10.1)来使用。但是缺省安装以及按照大量博客推荐安装的PHP-FPM的最大问题是它会消耗大量资源,包括内存和CPU。本博客使用的服务器也遭遇了类似的命运。因为我也是按照那些教程安装的,而教程里对于PHP-FPM的配置选项描述的不够有效。你可以在/etc/php5/fpm/pool.d目录下发现这些低效的配置选项。举例来说,以下是我的服务器(当然不是目前这个站点)上的那些低效选项:; Choose how the process manager will control the number of child processes.pm = dynamicpm.max_children = 75pm.start_servers = 10pm.min_spare_servers = 5pm.max_spare_servers = 20pm.max_requests = 500那台服务器是一台DigitalOcean Droplet,配置512M内存。它上面运行了一个新网站,即使完全空闲时,也必须要靠交换内存才能避免僵死。执行top命令显示了服务器上占用内存最多的进程。PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND13891 cont 20 396944 56596 33416 S 0.0 11.3 :14.05 php5-fpm13889 cont 20 396480 56316 32916 S 0.0 11.2 :17.67 php5-fpm13887 cont 20 624212 55088 32008 S 0.0 11.0 :14.02 php5-fpm13890 cont 20 396384 55032 32312 S 0.0 11.0 :13.39 php5-fpm13888 cont 20 397056 54972 31988 S 0.0 11.0 :14.16 php5-fpm14464 cont 20 397020 54696 31832 S 0.0 10.9 :09.44 php5-fpm13892 cont 20 396640 54704 31936 S 0.0 10.9 :12.84 php5-fpm13883 cont 20 396864 54692 31940 S 0.0 10.9 :15.64 php5-fpm13893 cont 20 396860 54628 32004 S 0.0 10.9 :15.13 php5-fpm13885 cont 20 396852 54412 32116 S 0.0 10.8 :13.94 php5-fpm13884 cont 20 395164 53916 32364 S 0.0 10.7 :13.51 php5-fpm13989 cont 20 394960 53548 32108 S 3.7 10.7 :14.37 php5-fpm2778 mysql 20 1359152 31704 1728 S 0.7 6.3 1:38.80 mysqld13849 root 20 373832 1180 188 S 0.0 0.2 :03.27 php5-fpm输出结果显示有12个php5-fpm子进程(用户名是cont)和一个主进程(用户名是root)。而这12个子进程只是呆坐在那里,什么事也不做,每个子进程白白消耗超过10%的内存。这些子进程主要是由pm=dynamic这个配置选项产生的。老实说,绝大部分的云主机拥有者也不知道所有这些配置选项是干什么用的,只是简单地复制粘贴而已。我也不准备假装我了解每个PHP配置文件里的每一个选项的目的和意义。我在很大程度上也是复制粘贴的受害者。但是我经常检查服务器的资源占用情况,困惑于为什么我的服务器占用这么多的内存和CPU。举另外一个例子,是这台服务器上的free -mt命令的结果: total used free shared buffers cachedMem: 490 480 9 31 6 79-/+ buffers/cache: 393 96Swap: 2047 491 1556Total: 2538 971 1566在没有任何访问量的情况下,也几乎有整整1G的内存(实际内存加上交换内存)被占用。当然,通过调整配置pm的数量可以有所改变,但只是轻微的。只要设置pm=dynamic,就会有空闲的子进程等在那里等待被使用。直到读了一篇文章《A better way to run PHP-FPM》(更好地运行PHP-FPM)之后,我开始意识到应该如何修改我的配置文件。那篇文章是大约一年前写的,令人失望的是我从昨天晚上搜索相关主题时才看到它。如果你也有服务器并且使用PHP-FPM的话,我建议你好好读一下那篇文章。读完文章之后,我修改了我的pm选项,如下:; Choose how the process manager will control the number of child processes.pm = ondemandpm.max_children = 75pm.process_idle_timeout = 10spm.max_requests = 500最主要的改动就是用pm=ondemand替换了pm=dynamic。这一改动对资源占用的影响是巨大的。下面是改动并重新加载php5-fpm之后运行free -mt的结果: total used free shared buffers cachedMem: 490 196 293 28 9 70-/+ buffers/cache: 116 373Swap: 2047 452 1595Total: 2538 649 1888和之前的结果对比,内存使用量下降了50%。产生这一下降的原因通过执行top命令一目了然:2778 mysql 20 1359152 56708 3384 S 0.0 11.3 2:11.06 mysqld 26896 root 20 373828 19000 13532 S 0.0 3.8 :02.42 php5-fpm 25818 root 20 64208 4148 1492 S 0.0 0.8 :01.88 php5-fpm25818 root 20 64208 4148 1492 S 0.0 0.8 :01.88 php5-fpm 17385 root 20 64208 4068 1416 S 0.0 0.8 :02.23 php5-fpm 1465 ossec 20 15592 2960 480 S 0.0 0.6 :08.60 ossec-analysisd 1500 root 20 6312 2072 328 S 0.0 0.4 :45.55 ossec-syscheckd 1 root 20 33444 1940 812 S 0.0 0.4 :03.29 init你注意到这里已经没有子进程了吗?它们去哪里了?这就是设置pm=ondemand的作用。这样设置之后,只有当有需要的时候,子进程才会被产生。事情做完之后,子进程会留在内存中10秒钟时间(pm.process_idle_timeout = 10s),然后自己退出。我只是对PHP-FPM的配置做了一点小小的修改,就节省了50%的内存。当然,这台服务器没有承受大并发的压力,但我相信它能顶得住合理的高负载,考虑到它只有512M内存。再加上Nginx微缓存的配置,我想它会做的更好。当然还有另外一些PHP-FPM和Percona MySQL的配置优化我还没有做。这里只是给大家分享一个我觉得非常有用的小窍门。
2023年08月10日
18 阅读
0 评论
0 点赞
2023-08-09
php-fpm优化方法详解
php-fpm优化方法详解php-fpm存在两种方式,一种是直接开启指定数量的php-fpm进程,不再增加或者减少;另一种则是开始时开启一定数量的php-fpm进程,当请求量变大时,动态的增加php-fpm进程数到上限,当空闲时自动释放空闲的进程数到一个下限。这两种不同的执行方式,可以根据服务器的实际需求来进行调整。要用到的一些参数,分别是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。pm表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。下面4个参数的意思分别为:pm.max_children:静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进程数(这里要注意pm.max_spare_servers的值只能小于等于pm.max_children)pm.start_servers:动态方式下的起始php-fpm进程数量。pm.min_spare_servers:动态方式空闲状态下的最小php-fpm进程数量。pm.max_spare_servers:动态方式空闲状态下的最大php-fpm进程数量。如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置的数量个php-fpm进程。如果dm设置为dynamic,4个参数都生效。系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
2023年08月09日
12 阅读
0 评论
0 点赞
2023-08-09
php-fpm解读-进程管理的三种模式
php-fpm解读-进程管理的三种模式php-fpm进程管理一共有三种模式:ondemand、static、dynamic,我们可以在同一个fpm的master配置三种模式,看下图1。php-fpm的工作模式和nginx类似,都是一个master,多个worker模型。每个worker都在accept本pool内的监听套接字(linux已不存在惊群现象)。图1ondemand在php-fpm启动的时候,不会给这个pool启动任何一个worker,是按需启动,当有连接过来才会启动。配置文件(我的配置文件地址为:/usr/local/php/etc/php-fpm.conf)当前pool的名字为test原理ondemand原理图从上图可以看出,新建worker的触发条件是连接的到来,而不是实际的请求(例如,只进行连接比如telnet,不发请求数据也会新建worker)worker的数量受限于pm.max_children配置,同时受限全局配置process.max(准确的说,三种模式都受限于全局配置)3.1秒定时器作用找到空闲worker,如果空闲时间超过pm.process_idle_timeout大小,关闭。这个机制可能会关闭所有的worker。配置项要求pm.max_children> 0pm.process_idle_timeout> 0,如果不设置,默认10s优缺点优点:按流量需求创建,不浪费系统资源(在硬件如此便宜的时代,这个优点略显鸡肋)缺点:由于php-fpm是短连接的,所以每次请求都会先建立连接,建立连接的过程必然会触发上图的执行步骤,所以,在大流量的系统上master进程会变得繁忙,占用系统cpu资源,不适合大流量环境的部署dynamic在php-fpm启动时,会初始启动一些worker,在运行过程中动态调整worker数量,worker的数量受限于pm.max_children配置,同时受限全局配置process.max当前pool的名字为test原理dynamic原理图1秒定时器作用检查空闲worker数量,按照一定策略动态调整worker数量,增加或减少。增加时,worker最大数量<=max_children· <=全局process.max;减少时,只有idle >pm.max_spare_servers时才会关闭一个空闲worker。idle > pm.max_spare_servers,关闭启动时间最长的一个worker,结束本次处理idle >= pm.max_children,打印WARNING日志,结束本次处理idle < pm.max_children,计算一个num值,然后启动num个worker,结束本次处理配置项要求pm.min_spare_servers/pm.max_spare_servers有效范围(0,pm.max_children]pm.max_children> 0pm.min_spare_servers<=pm.max_spare_serverspm.start_servers有效范围[pm.min_spare_servers,pm.max_spare_servers]如果没有配置,默认pm.min_spare_servers + (pm.max_spare_servers - pm.min_spare_servers) / 2优缺点优点:动态扩容,不浪费系统资源,master进程设置的1秒定时器对系统的影响忽略不计;缺点:如果所有worker都在工作,新的请求到来只能等待master在1秒定时器内再新建一个worker,这时可能最长等待1s;staticphp-fpm启动采用固定大小数量的worker,在运行期间也不会扩容,虽然也有1秒的定时器,仅限于统计一些状态信息,例如空闲worker个数,活动worker个数,网络连接队列长度等信息。当前pool的名字为test原理配置项要求1、pm.max_children> 0 必须配置,且只有这一个参数生效优缺点如果配置成static,只需要考虑max_children的数量,数量取决于cpu的个数和应用的响应时间,我司配置的是50。我司不考虑动态的增加减少那么十几个或者几十个worker,我们的内存没有紧张到这个程度,所以,我们一步到位,把worker数配置到支持最大流量,(哈哈,50也是随便定的,足矣足矣呢)最后我们再介绍下worker的工作流程此图出自大表哥@要要fastcgi与php-fpm的关系一句话解读:fastcgi只是通信应用协议,php-fpm就是实现了fastcig协议,并嵌入了一个 PHP 解释器。完
2023年08月09日
13 阅读
0 评论
0 点赞
1
2