2021-05-29(转载 PHP-FPM & FastCGI)

PHP-FPM和FastCGI PHP-FPM是基于FastCGI的一种专门用于 PHP 的进程管理工具,提供了更高效的请求处理和更好的性能管理,FastCGI是一种高效的协议,而PHP-FPM是 PHP 的实现FastCGI是一种接口协议,用于将 HTTP 请求与后端应用程序(如 PHP、Python 等)连接。它是CGI)的改进版本,提供了更好的性能和资源管理PHP-FPM是 PHP 的一个实现,它利用FastCGI协议来处理 PHP 请求。它是 PHP 的一个替代方式,提供了进程管理和更好的性能。 阅读详情

PHP-FPM & FastCGI
PHP-FPM(FastCGI Process Manager)是一个PHPFastCGI进程管理器,从其英文名称和定义可以看出,FPM的核心功能就是进程管理。

FastCGI可以理解为一种协议,用于web服务器(nginx、Apache)和处理程序间进行通信,是一种应用层通信协议。

工作原理大致如下图


fpm的基本实现
fpm创建master进程,在master进程中创建work pool并监听socket,然后fork出多个子进程(work),这些work在启动后阻塞fcgi_accept_request()上,各自accept请求,有请求到达后worker开始读取请求数据,读取完成后开始处理然后再返回,在这期间是不会接收其它请求的,也就是说fpm的子进程同时只能响应一个请求,只有把这个请求处理完成后才会accept下一个请求。
fpm的master与work进程间不会直接通讯,master通过共享内存获取worker进程的信息,比如worker进程当前状态、已处理请求数等,master要杀死worker进程也是通过发送信号
pm可以同时监听多个端口,每个端口对应一个worker pool,而每个pool下对应多个worker进程,类似nginx中server概念, 在php-fpm.conf中可以配置多个,例如:
[web1]
listen:127.0.0.1:9000
[web2]
listen:127.0.0.1:9001

php生命周期
PHP在web方式中如何改了文件就立即生效的,重要的几个概念:

● sapi: 可以简单的理解为php引擎对外的一个统一接口,使得php可以和外部程序进行交互

● php的生命周期中关键四个调用: MINT -> RINT -> RSHUTDOWN -> MSHUTDOWN

​ 数据初始化(mint)==》请求初始化(rint) ==》编译脚本(rshuntdown) ==》执行代码(mshutdown)

● fpm: fastcgi进程管理器

FPM 流程
fpm通过sapi接口与php进程交互

1.fpm启动会调用各扩展的MINT方法,进行一些数据初始化(长驻内存)

2.每个请求过来,先会执行RINT对单个请求行一个初始化

3.执行php脚本(在没有缓存opcode的情况下,这里的php脚本是动态执行的,所以更新php脚本后,会执行新的php脚本,详情不在这里叙述)

4.执行RSHUTDOWN方法

5.如果你要停止fpm了,才会执行MSHUTDOWN

fpm对每个请求的处理都是一直在在重复执行 2~4步,在第三步中,php的脚本是动态执行的,由于每次都要执行一次php脚本,而每次php脚本都要有一个把php文件翻译成opcode的流程(比较耗时), 于是就产生的opcache工具。

opcache

直接把php翻译后的opcode代码树保存到共享内存中,以便直接使用,从而减少每次都把php翻译成opcode的开销。

opcache的问题: 按照他的描述,修改了php文件,并不能立即被更新。

opcache的解决方案: 有一个配置来设置隔多长时间检测文件是否更新了,从而有机会在第二步重新来reload相关的文件。

当然,直接reload fpm,从而达到php热更新的效果(opcache扩展可以在第四步把相关的opcode cache给清空)。

work 工作流程
worker的工作流程包含以下几个步骤

等待请求:fcgi_accept_request()阻塞等待请求
接收请求:fastcgi请求到达后被worker接收并解析,一直到完全接收,然后将method、query、uri等信息保存到worker进程的fpm_scoreboard_proc_s结构中
初始化请求:php_request_startup()执行,此步骤会调用每个扩展的PHP_RINIT_FUNCTION方法,初始化一些操作
处理请求(编译、执行):php代码编译执行阶段,由 php_execute_script方法完成
关闭请求:返回响应,执行php_request_shutdown方法关闭请求,然后进入第一步继续等待请求,此步骤会执行每个扩展的PHP_RSHUTDOWN_FUNCTION进行一些收尾工作
int main(int argc, char *argv[])
{
    ...变量定义,参数初始化
    //注册SAPI
    sapi_startup(&cgi_sapi_module);
    ...
    //执行php_module_starup()
    if (cgi_sapi_module.startup(&cgi_sapi_module) == FAILURE) {
        return FPM_EXIT_SOFTWARE;
    }
    //初始化
    if(0 > fpm_init(...)){
        //记录日志并退出
        return FPM_EXIT_CONFIG;
    }
    ...
    fpm_is_running = 1;//fpm运行状态标识
    fcgi_fd = fpm_run(&max_requests);//进程初始化,调用fork()创建work进程
     ...
    fcgi_init_request(&request, fcgi_fd); //初始化请求;
    //此阶段的php_request_startup()会调用每个扩展的:PHP_RINIT_FUNCTION();
    if (UNEXPECTED(php_request_startup() == FAILURE)) {
    ...
    }
    ...
    php_fopen_primary_script(&file_handle TSRMLS_CC); //打开脚本; 
    ...
    php_execute_script(&file_handle TSRMLS_CC); //执行脚本; 
    ...
    //worker进程退出
    php_module_shutdown();
    ...
}

PHP-FPM运行三种模式
PHP7 默认是

pm=dynamic
pm.max_children=50

fpm.conf 参数
pm.start_servers = 5

动态方式下的起始php-fpm进程数量

只有当pm的配置为dynamic时候才会有效如果为static,会忽略此参数

php启动的时候,开启子进程的数量。具体的子进程的数量会根据请求的变化发生变化,但是最大不会超过pm.max_children配置的数值。

min_spare_servers + (max_spare_servers - min_spare_servers) / 2;
一般而言,设置成10-20之间的数据足够满足需求了。

pm.max_children = 50

表示php-fpm能启动的子进程的最大数

static下只有这一个参数生效

计算方式

一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M~30M左右,因此我的”max_children”我设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内,低于我的有效内存2Gb。

而如果我 的”max_children”设置的较小,比如5-10个,那么php-cgi就会“很累“,处理速度也很慢,等待的时间也较长,占用的CPU也很高。

如果长时间没有得到处理的请求就会出现 504 Gateway Time-out 这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现 502 Bad gateway 这个错误。

max_children较好的设置方式根据req/s(吞吐率,单位时间里服务器处理的最大请求数,单位req/s)来设置,若程序是 100 req/s 的处理能力,那么就设置 100比较好,这是动态来调整的。

pm.max_spare_servers

动态方式下空闲状态最大php-fpm数量

pm.max_spare_servers的值只能小于等于pm.max_children

系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。

pm.process_idle_timeout = 10s

worker 空闲多少秒之后被kill,按需分配模式dynamic

默认10s

pm.max_requests=500

每个进程处理多少个请求之后自动终止,可以有效防止内存溢出,如果为0则不会自动终止,默认为0#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 ‘0’ 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0

pm.status_path

注册的URI,以展示php-fpm状态的统计信息

在php-fpm.conf中打开
在nginx中配置
server {
    ......
    
    # 在 server 中添加以下配置
    location = /status {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    }
    
    .....
}

pool – fpm池子名称,大多数为www
process manager – 进程管理方式,值:static, dynamic or ondemand. dynamic
start time – 启动日期,如果reload了php-fpm,时间会更新
start since – 运行时长
accepted conn – 当前池子接受的请求数
listen queue – 请求等待队列,如果这个值不为0,那么要增加FPM的进程数量
max listen queue – 请求等待队列最高的数量
listen queue len – socket等待队列长度
idle processes – 空闲进程数量
active processes – 活跃进程数量
total processes – 总进程数量
max active processes – 最大的活跃进程数量(FPM启动开始算)
max children reached - 进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,请改大一点。
slow requests – 启用了php-fpm slow-log,缓慢请求的数量

ping.path

ping url,可以用来测试php-fpm是否存活并可以响应

ping.response
ping url的响应正文返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
ping.response = pong
11)pid = run/php-fpm.pid
#pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启

error_log = log/php-fpm.log
#错误日志,默认在安装目录中的var/log/php-fpm.log

log_level = notice
#错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.

emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.

daemonize = yes
#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。

listen = 127.0.0.1:9000
#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: ‘ip:port’, ‘port’, ‘/path/to/unix/socket’. 每个进程池都需要设置.

listen.backlog = -1
#backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。 19)listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接
listen.owner = www
listen.group = www
listen.mode = 0666

#unix socket设置选项,如果使用tcp方式访问,这里注释即可。
user = www
group = www
#启动进程的帐户和组

request_terminate_timeout = 0
#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的’max_execution_time’因为某些特殊原因没有中止运行的脚本有用. 设置为 ‘0’ 表示 ‘Off’.当经常出现502错误时可以尝试更改此选项。

request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 ‘0’ 表示 ‘Off’

slowlog = log/$pool.log.slow
#慢请求的记录日志,配合request_slowlog_timeout使用

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。

rlimit_core = 0
#设置核心rlimit最大限制值. 可用值: ‘unlimited’ 、0或者正整数. 默认值: 系统定义值.

chroot =
#启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.

chdir =
#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)

catch_workers_output = yes
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.

static 静态模式
php-fpm启动的时候,创建固定的worker数量

该模式比较简单,在启动时按照配置pm.max_children启动固定数量的的进程,这些进程阻塞进行请求的接收
方法执行流程:
fpm_run()->fpm_children_create_initial()->fpm_children_make()
启动fpm的时候会调用fpm_run方法,而fpm_run方法内部会调用子进程初始化方法fpm_children_create_initial,
在该方法内部会调用fpm_children_make方法创建worker进程。

php-fpm启动采用固定大小数量的worker,在运行期间也不会扩容,虽然也有1秒的定时器,仅限于统计一些状态信息,例如空闲worker个数,活动worker个数,网络连接队列长度等信息。

配置
pm=static
pm.max_children=3

static的时候只有这个参数生效
1
2
3
4

方法执行流程:
fpm_run()->fpm_children_create_initial()->fpm_children_make()
启动fpm的时候会调用fpm_run方法,而fpm_run方法内部会调用子进程初始化方法fpm_children_create_initial,
在该方法内部会调用fpm_children_make方法创建worker进程

原理


配置项要求
1、pm.max_children> 0 必须配置,且只有这一个参数生效

优缺点
如果配置成static,只需要考虑max_children的数量,数量取决于cpu的个数和应用的响应时间,我司配置的是50。

我司不考虑动态的增加减少那么十几个或者几十个worker,我们的内存没有紧张到这个程度,所以,我们一步到位,把worker数配置到支持最大流量,(哈哈,50也是随便定的,足矣足矣呢)

ondemand 按需分配模式
pm = ondemand
pm.process_idle_timeout = 60 #worker 空闲多少秒之后被kill,按需分配模式dynamic
pm.max_children=3
1
2
3


原理


ondemand原理图

\1. 从上图可以看出,新建worker的触发条件是连接的到来,而不是实际的请求(例如,只进行连接比如telnet,不发请求数据也会新建worker)

\2. worker的数量受限于pm.max_children配置,同时受限全局配置process.max(准确的说,三种模式都受限于全局配置)

3.1秒定时器作用

找到空闲worker,如果空闲时间超过pm.process_idle_timeout大小,关闭。这个机制可能会关闭所有的worker。

配置项要求
\1. pm.max_children> 0

\2. pm.process_idle_timeout> 0,如果不设置,默认10s

优缺点
优点:按流量需求创建,不浪费系统资源(在硬件如此便宜的时代,这个优点略显鸡肋)

缺点:由于php-fpm是短连接的,所以每次请求都会先建立连接,建立连接的过程必然会触发上图的执行步骤,所以,在大流量的系统上master进程会变得繁忙,占用系统cpu资源,不适合大流量环境的部署

代码流程
ondemand模式,运行流程和第一步相同,不同之处是在第二个函数中不会分配work进程,而是注册了一个事件回调函数fpm_pctl_on_socket_accept(),部分代码如下:

if (wp->config->pm == PM_STYLE_ONDEMAND) { 
     wp->ondemand_event = (struct fpm_event_s *)malloc(sizeof(struct fpm_event_s));   
      ......   
     memset(wp->ondemand_event, 0, sizeof(struct fpm_event_s));    
      fpm_event_set(wp->ondemand_event,wp->listening_socket,FPM_EV_READ|FPM_EV_EDGE,fpm_pctl_on_socket_accept, wp);    
      ......
}
1
2
3
4
5
6
7
以上代码片段只保留了部分本文所需要的内容

ondemand模式work进程的创建,回调函数fpm_pctl_on_socket_accept()的部分代码如下:

if (wp->running_children >= wp->config->pm_max_children) {   //判断进程数是否超过最大限制
       ......    
       return;
}
for (child = wp->children; child; child = child->next) { 
   //fpm_request_is_idle函数返回return proc->request_stage == FPM_REQUEST_ACCEPTING
   if (fpm_request_is_idle(child)) { 
       return;   // FPM_REQUEST_ACCEPTING代表处于等待请求阶段
 }
}
...... 
fpm_children_make(wp, 1, 1, 1);//创建work进程

ondemand模式work进程的关闭
PFM注册了一个定时事件fpm_pctl_perform_idle_server_maintenance_heartbeat检查当前模式下work进程的运行情况,当空闲进程等待请求时间超过pm_process_idle_timeout后,会对最后一个空闲worker进程发出关闭信号,此操作由主进程进行处理,部分代码如下:

if (wp->config->pm == PM_STYLE_ONDEMAND) {
    struct timeval last, now;    
    if (!last_idle_child) continue;//最后一个idle进程
     ......
    // last.tv_sec为上次接收请求的时间
    if (last.tv_sec < now.tv_sec - wp->config->pm_process_idle_timeout) {
        last_idle_child->idle_kill = 1;
        fpm_pctl_kill(last_idle_child->pid, FPM_PCTL_QUIT);
    }
    continue;
}

dynamic模式:动态模式
dynamic模式,启动时分配固定数量的work进程,然后随着请求的增加会增加进程数,此模式下几个重要的配置项如下:

max_children 最大进程数
pm_max_spare_servers 允许最大的空闲进程数
min_spare_servers 允许最小的空闲进程数
start_servers 启动时的进程数

执行过程和ondemand模式类似,启动时主进程都会创建一个定时事件来定时检查work的运行状况,不同的是dynamic模式初始化的时候会创建一定数量的进程,而ondemand模式不会创建

配置
pm = dynamic
pm.max_children = 3
pm.start.servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZehrV8gR-1579172905068)(PHP-FPM.assets/image-20200116174736466.png)]

原理


dynamic原理图

\1. 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,结束本次处理

配置项要求
\1. pm.min_spare_servers/pm.max_spare_servers有效范围(0,pm.max_children]

\2. pm.max_children> 0

\3. pm.min_spare_servers<=pm.max_spare_servers

\4. pm.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;

总结
static 静态模式,启动的时候创建固定数量的worker 进程,实际请求大于worker进程的时候 包warning

ondemand 按需分配模式,启动的时候不会创建worker进程,根据需要创建,释放在idle_timeout之后

​ 这样不能及时的释放连接和建立连接需要消耗资源

dynamic 动态模式(默认):启动的时候创建指定数量的worker进程,根据情况合理的worker,定期检查worker,关闭闲置连接

参考文件,如有不合适的,请告知删除

链接:https://www.jianshu.com/p/c9a028c834ff

https://www.toutiao.com/a6776929604788552196/?tt_from=mobile_qq&utm_campaign=client_share&timestamp=1579141890&app=news_article&utm_source=mobile_qq&utm_medium=toutiao_android&req_id=202001161031300100080431041DC7F156&group_id=6776929604788552196

https://blog.youkuaiyun.com/njrclj/article/details/85062459
————————————————
版权声明:本文为优快云博主「a...Z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:

FastCGI 进程管理器(FPM) 阅读详情

相关推荐

Multisim14.3中FPGA接口电路设计:原理图项目应用

深入讲解在multisim14.3环境下构建FPGA接口电路的方法,结合原理图设计与项目实践,展现multisim14.3强大的电路仿真能力,提升数字系统开发效率。

weixin_42578963的博客 1157

PHP底层原理:CGI、FastCGI与PHP-FPM

在搭建 LAMP/LNMP 服务器时,会经常遇到 CGI、FastCGI 或 PHP-FPM 等等几个相关个概念。如果对它们一知半解,很难搭建出高性能的服务器。本文会以图文的形式,解释这些概念之间的关系。在这之前,先了解一下相关的概念。

m0_37486454的博客 1364

从虚拟机到双系统:手把手教你为Gromacs搭建最强Linux环境(含WSL2、Ubuntu22.04配置)

本文详细指导如何在Windows系统下为Gromacs分子动力学模拟搭建高性能Linux环境,涵盖WSL2和Ubuntu22.04双系统配置。通过对比虚拟机、WSL2和原生Linux的性能数据,提供GPU加速、内存优化等实用技巧,帮助科研人员提升计算效率。

weixin_30861797的博客 270

PHP-fpm

连接到来时(只有链接,不没有数据也会创建,telnet也会创建),创建新worker进程,worker进程数的创建收max_children设置限制,也受限于全局的process.max设置,如果空闲时间超过了process_idle_timeout的设置就会销毁worker进程,优点按流量需求创建,不浪费系统资源,缺点因为php-fpm是短连接的,如果每次请求都先建立连接,大流量场景下会使得master进程变得繁忙,浪费cpu,不适合大流量模式。PHP-FPM提供了更好的PHP进程管理方式,可以有。...

m0_66412572的博客 3814

Anthropic发布10款金融AI智能体模板深度解析:重构华尔街工作范式

摘要:2026年5月,Anthropic发布10款金融AI智能体模板,标志着AI从辅助工具升级为&quot;虚拟同事&quot;。这些智能体深度集成到Word、Excel等办公软件中,覆盖投行、商行、资管三大场景的核心工作流,预计可提升效率35-85%。技术架构基于Claude3.5Sonnet模型,具备200K上下文窗口和95%+的财务图表解析准确率,并与彭博等金融数据源直连。发布引发传统金融数据服务商股价下跌,摩根大通等机构则视其为成本优化工具。落地需分四阶段推进,关键在于数据治理和复合型人才培养。未来

yyq916的博客 635

WPF实战:利用Live Charts实现高性能动态曲线可视化

本文详细介绍了如何在WPF中使用Live Charts实现高性能动态曲线可视化,特别适用于工业监控和金融分析等实时数据场景。通过增量渲染、内存复用和硬件加速等核心技术,Live Charts能够高效处理高频数据更新,显著提升图表流畅度。文章提供了从基础实现到工业级优化的完整解决方案,帮助开发者应对各种性能挑战。

weixin_29189373的博客 407

利用Fastcgi+PHP-FPM非授权访问实现代码执行

FastCGI (Fast Common Gateway Interface) 是一种用于扩展服务器功能的协议。它允许 Web 服务器将动态内容的处理委托给外部程序,而不是由 Web 服务器自身来处理。PHP-FPM (PHP FastCGI Process Manager) 是 PHP 的一个 FastCGI 进程管理器,它可以处理 PHP 脚本的执行。 FastCGI 和 PHP-FPM 的结合可以提供更高效的 PHP 脚本处理方式,通过将 PHP 解释器作为独立的进程运行,而不是作为 Web 服务器

qq_68163788的博客 1682

帆软报表JS导出避坑指南:如何正确处理sessionid和参数传递

本文深入探讨了帆软报表中通过JavaScript实现一键导出的关键技术,重点解析了如何正确获取并传递sessionid以确保会话不丢失,以及如何构造包含必要参数的导出URL。文章详细对比了预览后导出与直接URL导出两种方式的差异,并提供了从参数拼接、前端触发下载到高级场景(如SPA集成)的完整避坑指南,帮助开发者构建稳定可靠的自定义导出功能。

weixin_42522857的博客 162

php-fpm与fastcgi、php-cgi之间的关系及源码解析

关于FastCGI、php-cgi、php-fpm的区别是什么,各自有什么用途,以及相互间的关系是什么,查阅相关资料,可谓是众说纷纭,莫衷一是: 说法一:fastcgi是一个协议,php-fpm实现了这个协议; 说法二:php-fpm是FASTCGI进程的管理器,用来管理fastcgi进程的; 说法三:php-fpm是php内核的一个补丁; 说法四:修改了php.ini配置文件后,没办法平滑重启,...

王道长的技术博客 5489

k3s cpu load 和 cpu 使用率很高处理

在这期间还执行过缩减 sqlite3 数据库操作,不知道是哪个操作起了作用,亦或者两个操作有影响,删除 ns 促进了数据库缩减的执行(没删除之前数据库缩减不成功,db文件大小未减小,但不确定是不是执行完 VACUUM 之后需要时间 db 文件才会减小,或者是因为删除了 ns 才导致其减小),再或者是两个操作都起了作用。kubectl get ns 发现有很多卡在删除状态的 ns。k3s 官网关于这个问题的谈论。执行如下脚本删除掉这些 ns。有人详细说过这个问题。

weixin_40548182的博客 683

基于MATLAB的特征模式分解(FMD)算法详解

本文详细介绍了基于MATLAB的特征模式分解(FMD)算法实现。FMD是一种新型自适应信号分解方法,通过自适应FIR滤波器组和相关峭度优化目标,有效解决传统方法(如EMD、VMD)的模态混叠问题。文章系统阐述了FMD的算法原理、数学模型和实现步骤,包括自适应FIR滤波器设计、相关峭度优化和模态选择机制。与现有方法相比,FMD在旋转机械故障诊断中展现出更强的特征提取能力和噪声鲁棒性。MATLAB实现部分包含核心函数、参数优化和可视化工具,并通过轴承故障等案例验证了算法的有效性。

qq_42212808的博客 193

Fastcgi协议与PHP-FPM 攻击方法

1、CGI(Common Gateway Interface) 通用网关接口 最早的服务器只能够返回静态资源给浏览器。但这种方式满足不了人们的所有需求,于是出现了动态网站技术,但是Web服务器不能够直接解释执行动态脚本,于是人们为了能够让Web服务器与外部应用程序(CGI程序)互相通信。CGI通用网关接口应运而生。简单地说CGI就像是一种协议,这种协议规定了Web服务器和运行在Web服务器上的应用程序进行交流的方式。 当Web服务器需要解析动态脚本时,Web服务器会Fork一个新的进程来启动CGI成语完

秀 1228

AI Agent智能体在Android开发中的应用

本文探讨了AIAgent(智能代理体)在Android开发中的应用,涵盖技术原理、实践案例与未来趋势。AIAgent通过机器学习、自然语言处理等技术实现代码生成、测试自动化及性能优化,显著提升开发效率。例如,强化学习模型可优化APP响应时间(公式:$\text{响应时间}=f(\text{负载},\text{资源})$),自动化测试覆盖率提升至95%。

郑伟强dev的专栏 124

fastcgi未授权访问漏洞(php-fpm fast-cgi未授权访问漏洞)

fastcgi未授权访问漏洞

好好睡觉 5206

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

简单了解下CGI、FastCGI和php-fpm的概念和区别和运行原理

什么是CGI? CGI(Common Gateway Interface),公共网关接口,它是Web服务器与外部应用程序(CGI程序)之间传递信息的接口标准。通过CGI接口,Web服务器就能够获取客户端提交的信息,并转交给服务器端的CGI程序处理,最后返回结果给客户端。也就是说,CGI实际上是一个接口标准。我们通常所说的CGI是指CGI程序,即实现了CGI接口标准的程序。只要某种语言具有标准输入...

weixin_30522183的博客 225

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

php-fpm

首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。 web server(比如说nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找P...

Anglry的博客 398

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

php-fpm和cgi,并发响应的理解以及高并发和多线程的关系、 为高性能优化 PHP-FPM

PHP 是无处不在的,可以说是互联网 Web 应用上使用最广泛的语言。 然而,它的高性能并不为人所知,尤其是在涉及到高并发系统时。这就是为什么对于这样特殊的用例,正在被 Node (是的,我知道,它不是一种语言)、Go 和 Elixir 等语言接管。 也就是说,您可以做很多事情来改进服务器上的 PHP 性能。本文主要关注 php-fpm 方面的内容,如果您使用 Nginx,这是在服务器上的默认配置。 如果你知道 php-fpm 是什么,请直接跳到优化部分。 什么是 php-fpm? 许多开发人员对

weixin_46742102的博客 3001

Fastcgi协议分析 && PHP-FPM未授权访问漏洞 && Exp编写

搭过php相关环境的同学应该对fastcgi不陌生,那么fastcgi究竟是什么东西,为什么nginx可以通过fastcgi来对接php? Fastcgi Record Fastcgi其实是一个通信协议,和HTTP协议一样,都是进行数据交换的一个通道。 HTTP协议是浏览器和服务器中间件进行数据交换的协议,浏览器将HTTP头和HTTP体用某个规则组装成数据包,以TCP的方式发送到服务器中间件...

mysteryflower的专栏 9513

ISAPI、CGI、FASTCGI、PHP-FPM与线程安全、线程非安全

web服务器与PHP的接口类型列表: /** * Returns the type of interface between web server and PHP * @link http://php.net/manual/en/function.php-sapi-name.php * @return string the interface type, as a lowercase strin...

weixin_34192732的博客 191

php-fpm / fastcgi 配置及优化

php5.3自带php-fpm /usr/local/php/etc/php-fpm.conf pid = run/php-fpm.pid pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log 错误日志,默认在安装目录中的var/log/php-fpm.log log_level = notice

djqiang的博客 1018

配置文件php-fpm.conf 2

;pm.status_path = /status 配置一个URI,以便查看FPM状态页,如果该值没有设置,那么没有URI会被认作是状态页。默认情况下,它会显示如下信息: accepted conn ...

208

zabbix监控php-fpm

作用: 监控php-fpm的状态, 可以对(slow requests)缓慢请求的做告警处理, 可以对(max children reached )大到进程最大数量限制的次数也做 告警处理等 相关工具的版本和系统信息 系统:CentOS6.8 zabbix-agent :4.0 zabbix-server: 4.2.3 nginx:1.6 php:5.4 ...

moyuanbomo的博客 583

FastCgi与PHP-fpm之间的关系

提问: 我在网上查fastcgi与php-fpm的关系,查了快一周了,基本看了个遍,真是众说纷纭,没一个权威性的定义。 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议; 有的说,php-fpm是fastcgi进程的管理器,用来管理fastcgi进程的; 有的说,php-fpm是php内核的一个补丁; 有的说,修改了php.ini配置文件后,没办法平滑重启,所以就诞生

小豪之家 2996

第二十二课时预习笔记

.nginx负载均衡   网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时候来自web前端的压力,也能让人十分头痛。怎样将同一个域名的访问分散到两台或更多的机器上呢?这其实就是另一种负载均衡了,nginx自身就可以做到,只需要做个简单的配置就行。   nginx不单可以作为强大的...

g66kai的博客 774

php-fpm开机自启动详细教程

php-fpm开机自启动详细教程

桃园码工的博客 4490

php - fpm 请求达到max_children最大值后,新进入的请求工作流程

高迸发情况下,php-fpm 在如何工作

聆听岁月的博客 1115
上一篇: 失败连接mysql导致wrning: mysql_num_rows(): supplied argument is not a valid MySQL result res (2021-05-20)
下一篇: (原创)2021-09-12当生产上的docker容器mysql忘记root密码时的完美解决方案
ccpit2b2c
博客等级 码龄15年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值