当前位置: 首页 > news >正文

PHP-FPM 深度调优指南 告别 502 错误,让你的 PHP 应用飞起来

PHP-FPM 深度调优指南 告别 502 错误,让你的 PHP 应用飞起来

理解 PHP-FPM 请求流程、进程池大小调整,以及防止超时和 502 错误的关键设置 — 实用规则、实际案例和可直接使用的检查清单。

大多数 PHP 应用出问题,不是因为 Nginx,而是 PHP-FPM(FastCGI 进程管理器)没配好或者进程数设置有问题。结果就是:p95 延迟突然飙高、502 错误随机出现,还有你看不到的请求排队。这篇文章会告诉你请求在 FPM 里是怎么跑的、进程池怎么工作,以及哪些配置能让应用不卡顿 — 这样流量突然上来时,你的应用还能正常响应。

原文链接-PHP-FPM 深度调优指南 告别 502 错误,让你的 PHP 应用飞起来

你将学到什么

  • Web 请求怎么到 PHP-FPM,又是怎么分配到具体的进程池和工作进程的
  • 控制吞吐量、队列和内存的几个关键进程池配置
  • 怎么根据内存而不是瞎猜来设置 pm.max_children 的靠谱方法
  • 怎么开启和查看 FPM 的状态、慢日志和 ping 来做真正的问题诊断
  • 一个有真实数据的小调优案例,还有马上就能用的调优清单

背景知识与定义

CGI(通用网关接口):旧的模型,Web 服务器为每个请求生成一个进程。简单但很慢。

FastCGI:Web 服务器和应用管理器之间的长连接协议。服务器复用连接,不用每次都新建进程。

PHP-FPM(FastCGI 进程管理器):管理 PHP 工作进程池的后台程序。每个进程池有自己的套接字、用户和配置。Nginx/Apache 把请求扔给套接字,FPM 负责分配给空闲的工作进程,或者排队等待。

进程池(Pool):一组共享配置的工作进程,通常按应用、租户或权限来划分。进程池能隔离故障和资源占用。

工作进程(Worker/Child):执行 PHP 脚本的解释器进程,一次只能处理一个请求。子进程内部不支持并发,每个请求都得有个空闲的子进程来处理。

OPcache:把编译好的 PHP 字节码缓存在共享内存里。每个工作进程都能用,大幅降低每个请求的 CPU 开销。

请求如何在 PHP-FPM 中流转

  1. 客户端 → Web 服务器。浏览器访问 https://example.com/index.php
  2. 位置匹配。Nginx 匹配到 .php 文件,转发给 FastCGI,比如:fastcgi_pass unix:/run/php/php-fpm.sock;
  3. 套接字接收。内核把连接放到套接字的 backlog 队列里,FPM 主进程接收
  4. 进程池分发。FPM 根据套接字选择进程池(比如 www),把请求分给空闲的工作进程
  5. 工作进程执行。子进程跑你的 PHP 脚本,用上 OPcache 和各种扩展
  6. 返回响应。工作进程把结果给 Nginx,Nginx 发给客户端,工作进程又变成空闲状态

容易卡住的地方:

  • 没有空闲工作进程 → 请求只能在进程池队列里排队
  • Backlog 满了 → Nginx 拿到 502/504 错误,或者客户端直接超时
  • 工作进程被 I/O 卡住 → CPU 闲着,但是延迟飙升

反常识的规则:按内存而不是 CPU 核数来设置

大多数人设置 pm.max_children 时会想"我们有几个核?"这样想是错的。每个 PHP 工作进程可能要吃掉几十甚至几百 MB 内存,具体看你的代码、扩展和 OPcache。如果开太多工作进程,内核开始换页或者 OOM killer 直接干掉进程 — 不管哪种情况,延迟都会爆炸。

正确的做法:

  1. 在有负载的情况下测量每个工作进程实际占用的内存
  2. 给进程池划分内存预算
  3. 算出 max_children = floor(进程池内存预算 / 每个子进程RSS)
  4. 然后在真实流量下用 pm.status_path 验证效果

重要的 PHP-FPM 设置(及其原因)

进程管理

  • pm:大部分应用用 dynamic;特别稳定的负载用 static;流量不稳定、访问量小的机器用 ondemand,这时候省内存比避免冷启动更重要
  • pm.max_children:每个进程池能同时处理多少请求的硬上限。这个设对了,决定你是排队等待还是直接挂掉
  • pm.start_servers, pm.min_spare_servers, pm.max_spare_servers:dynamic 模式下,控制保留多少空闲工作进程来应对流量突增
  • pm.process_idle_timeout:什么时候回收空闲工作进程(dynamic/ondemand)。设高点避免正常流量时频繁重启,设低点在流量低谷时释放内存
  • pm.max_requests:处理 N 个请求后重启工作进程,防止内存泄漏。一般设 500-5,000,看你的代码泄漏情况和启动开销

请求生命周期和保护机制

  • request_terminate_timeout:请求最长能跑多久。强制杀掉跑飞的脚本
  • request_slowlog_timeout + slowlog:记录慢请求的调用栈,找出哪里卡住了特别有用
  • rlimit_files 和 rlimit_core:提高文件句柄限制,需要调试的话允许生成 core dump

套接字和 backlog

  • listen:本地 Nginx ↔ FPM 用 Unix 套接字(性能更好)
  • listen.backlog:套接字队列深度。突发流量把队列撑爆了就调大点
  • listen.owner, listen.group, listen.mode:保证 Nginx 能正常访问套接字,不然就 502 了

健康检查和监控

  • pm.status_path:暴露进程池状态(活跃数、空闲数、队列长度、总连接数)
  • ping.path / ping.response:给负载均衡器用的简单健康检查接口

OPcache(相关但很重要)

  • opcache.memory_consumption:字节码共享内存大小。满了的话,缓存命中就变成未命中了
  • opcache.max_accelerated_files 和 revalidate_freq:保证有足够的文件槽位,验证频率也要合理,不然部署时会抖动
  • opcache.preload(PHP 7.4+):框架支持的话,预加载类文件能减少冷启动时间

简单可靠的进程池配置(带注释)

拿这个当模板,根据你的系统调整路径和名称。

; /etc/php-fpm.d/app.conf
[app]
user = www-data
group = www-data
listen = /run/php/php-fpm-app.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
listen.backlog = 1024pm = dynamic
pm.max_children = 32          ; 按内存算出来的 - 看下面的案例
pm.start_servers = 8
pm.min_spare_servers = 8
pm.max_spare_servers = 16
pm.process_idle_timeout = 20s
pm.max_requests = 2000; 保护机制
request_terminate_timeout = 30s
request_slowlog_timeout = 2s
slowlog = /var/log/php-fpm/app.slow.log; 健康检查
pm.status_path = /status
ping.path = /ping
ping.response = pong

在 Nginx 里加个 location 来暴露状态(注意控制访问权限):

location ~ ^/(status|ping)$ {allow 127.0.0.1;deny all;include fastcgi_params;fastcgi_pass unix:/run/php/php-fpm-app.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

实际案例:用真实数据来算内存配置

场景:8 GB 内存的虚拟机跑 Laravel 应用。机器上还有 Nginx、Redis 和系统服务,大概要用掉 2 GB。剩下 6 GB 给 PHP-FPM(app 进程池)。

1. 测量每个子进程内存。正常负载下,抽样 50 个工作进程:RSS 在 90-150 MB 之间,中位数 120 MB。

2. 算出 pm.max_childrenfloor(6,000 MB / 120 MB) = 50。保险起见,设成 pm.max_children = 44,给突发流量和 OPcache 碎片留点余量。

3. 应对突发流量。用 dynamic 模式:

pm.start_servers = 12
pm.min_spare_servers = 12
pm.max_spare_servers = 24

这样保持 12-24 个空闲工作进程,短时间的流量突增不用排队。

4. 防止内存泄漏。设置 pm.max_requests = 1500。观察 RSS 变化,如果工作进程一天内内存涨了 30% 以上,就调到 1000。

5. 验证效果

  • 稳定流量:600 RPS 静态文件 + 30 RPS PHP 请求,CPU 占用 ~30%,队列长度 0,p95 延迟 ~120 ms
  • 突发流量:60 秒内 120 RPS PHP 请求,活跃进程数稳定在 40 左右,队列长度 ≤ 5,没有 502 错误

如果队列长度 > pm.max_children/4 持续超过一分钟,要么加大 max_children(内存够的话),要么优化慢接口。

为什么优先考虑内存? 就算你有 16 个 CPU 核心,60 个 PHP 工作进程每个占 150 MB + 共享内存,也可能导致系统抖动。OOM killer 一旦出手,整个分钟的 p95 延迟都完蛋。用内存来控制并发数,避免这种悬崖式的性能下降。

逐步调优现有进程池

开启状态监控和慢日志

  • 启用 pm.status_path = /status,限制只能 localhost 或内网访问
  • 开启 request_slowlog_timeout = 2s,slowlog 路径要能写入
  • 加上 /ping 给健康检查用

常用检查命令:

curl -s http://127.0.0.1/status?full  # 查看空闲、活跃、最大子进程数等
tail -f /var/log/php-fpm/app.slow.log  # 负载测试时实时看慢日志

测量每个子进程内存

在真实负载下,用 ps -o pid,rss,cmd -C php-fpmsmem -P php-fpm 采样。
算出中位数 RSS。忽略那些在做文件上传或生成大报告的异常值。

设置 pm 和并发数

  • API 和 Web 应用首选 pm = dynamic;定时任务多、流量小的机器用 ondemand;只有流量特别稳定且内存摸得很清楚时才用 static
  • 按前面说的方法从内存预算算出 pm.max_children,比理论最大值低 10-20% 开始
  • 调整 start_servers 和备用进程数,让平时的空闲进程数保持在备用范围的下半部分

设置合理的超时

  • request_terminate_timeout 要和你的实际 SLO 匹配。客户端 30 秒就超时了,别让 PHP 跑 5 分钟
  • Nginx 里的 fastcgi_read_timeout 要和 PHP 的上限对齐(稍微高一点),避免提前返回 504

调整 backlog(但别掩盖问题)

  • 设置 listen.backlog = 1024 来应对短时间的连接突发
  • 如果持续负载下 backlog 一直不为零,这不是调参能解决的 — 要么加大 max_children,要么优化代码

负载测试验证

  • 先预热 OPcache
  • 2-5 分钟内逐步提升到预期的峰值 RPS
  • 观察状态:空闲 vs 活跃进程数、队列长度、是否触达最大子进程数
  • 确认 p95 延迟在预期范围内。不行的话,要么优化单个请求的处理时间,要么加内存 → 加子进程

常见陷阱和避免方法

  • 按 CPU 核数而不是内存来设置。结果就是内存不够用,开始换页或者直接 502。应该按内存算,然后确认 CPU 够用
  • 所有功能用一个大进程池。慢的后台任务会拖死前台用户请求。按功能或权限分开进程池
  • 流量大的站点用 pm.ondemand。冷启动会导致延迟忽高忽低。用 dynamic 模式,保持一些预热的备用进程
  • 不管 OPcache 是否满了。缓存满了就要重新编译,性能直线下降。监控缓存使用率,快满了就加大 opcache.memory_consumption
  • pm.max_requests 设太小。每 50 个请求就重启一次进程会很抖动,除非确实有内存泄漏,否则设大点
  • 不开慢日志。没有调用栈信息,I/O 慢的问题会被误认为是 FPM 的锅。开启慢日志,修复真正的问题
  • 超时时间不匹配。PHP 30 秒就杀进程了,Nginx 还在等 300 秒,或者反过来,都会产生莫名其妙的错误。把它们对齐

什么时候不该用 PHP-FPM

  • 长时间运行的任务(生成报告、数据导入、视频处理):放到队列/后台进程(CLI)里跑,接口直接返回 202 + 轮询/webhook
  • 流式传输或 WebSocket:交给专门的服务处理,或者用支持长连接的 PHP 运行时
  • 超高并发的轻量级请求:考虑其他方案(比如 RoadRunner、Swoole),它们用不同的 I/O 模型在持久进程里跑 PHP。迁移前一定要充分测试

工具和检查清单

快速调优检查清单

  • 状态和 ping 接口已开启且访问受限
  • 慢日志已开启,API 阈值 1-2 秒,SSR 页面可以设高点
  • pm = dynamicpm.max_children 按内存算出来,备用进程保持基线的 10-50% 空闲
  • max_requests 设在 1,000-3,000,确认 24 小时内没有内存泄漏
  • request_terminate_timeout 符合 SLO 要求,Nginx 超时时间对齐
  • OPcache 大小在峰值时还有 >20% 剩余空间
  • Backlog ≥ 512,文件描述符限制远超峰值连接数
  • 前台 Web 和后台管理/定时任务/队列用独立进程池

测量循环

负载测试 → 查看 pm.status 队列和空闲数 → 调整 max_children → 再测试。

观察 p95 延迟和错误率,如果队列一直在增长,先通过慢日志和 APM 找出慢接口,优化后再考虑提高并发数。

关键要点

  • PHP-FPM 一个工作进程同时只能处理一个请求,并发数就等于子进程数
  • 按单个子进程内存占用 × 内存预算来算进程池大小,不要按 CPU 核数
  • 流量有突发的话,保持一些备用工作进程待命;忙站点用 dynamic 比 ondemand 好
  • PHP 和 Nginx 的超时时间要对齐,开慢日志看时间都花在哪了
  • 用状态监控和负载测试来验证效果,别瞎调参数
  • 不同功能用不同进程池,别让后台慢任务影响前台用户
  • OPcache 容量和命中率是影响性能的关键因素
  • 如果业务场景不适合 FPM 模型(长时间运行或流式传输),就改架构,别只是调配置

总结

PHP-FPM 不是什么黑盒子,它就是个小而精确的系统。按内存来算并发数,保持几个预热的备用进程,把超时时间对齐好,像盯着股票一样盯着 OPcache 和队列长度。把进程池当成预算来管理 — 每个子进程都要吃内存 — 别照搬其他技术栈的经验值。每次改代码或调基础设施后,跑个简单的负载测试,先看看状态和慢日志,再决定要不要买更多硬件。坚持这个循环,你的 p95 延迟就会一直很稳定 — 就算流量突然变得很奇怪也不怕。

相关文章:

PHP-FPM 深度调优指南 告别 502 错误,让你的 PHP 应用飞起来

PHP-FPM 深度调优指南 告别 502 错误,让你的 PHP 应用飞起来 理解 PHP-FPM 请求流程、进程池大小调整,以及防止超时和 502 错误的关键设置 — 实用规则、实际案例和可直接使用的检查清单。 大多数 PHP 应用出问题,不是因为 Nginx,而是 PHP-FPM(FastCGI 进程管理器)没配好…...

RAG系统大脑调教指南:模型选择、提示设计与质量控保一本通

本文用轻松幽默的方式解密如何在RAG系统中选择、调教和监督生成模型,让它成为一个既聪明又靠谱的知识助手。从模型选择到提示工程再到质量控制,手把手教你如何避开AI的「胡言乱语」陷阱。你还记得上次问AI一个问题,它却自信满满地胡说八道的尴尬时刻吗?"嗯,根据我的分…...

智驾终局:VLA与WA的“强脑”之争

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087智驾领域的“终场哨”尚未吹响,真正的终局属于那些能把“说话”和“想象”融合成“思考”的玩家。当理想i8在暴雨中的山区公路…...

微软2018年第四季度顶级漏洞赏金猎人榜单揭晓

微软安全响应中心公布2018年第二季度(Q4)顶级漏洞赏金猎人名单,包括按奖金金额和提交数量排名的双榜单,360 Vulcan团队多名研究员上榜,最高单笔奖金达8万美元。2018年第四季度前五名漏洞赏金猎人表彰 | MSRC博客 我们已完成2018年4月至6月的数据统计。第四季度前五名漏洞赏…...

能源汽车智能线控底盘

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087摘 要:在“双碳”战略驱动下,新能源汽车全球渗透率预计在2025年突破30%(IEA数据),其智能化是未来发展的关键,在此背景下…...

Linux中的LED子专业的系统

Linux中的LED子专业的系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size…...

DP 凸性优化:wqs 二分

重构版:wqs 二分。发现自己阅读量最高的 wqs二分 有点简略,而且有些地方是错的,所以就重构了一下,并加入了更多的例题。 前面基本上都是照搬的原来那篇文章。介绍 wqs 二分最初由王钦石在他的 2012 年国家集训队论文中提出,也叫"带权二分",或者"dp凸优化&…...

浦东再添一所一流高校,上海交通大学医学院浦东校区正式启用

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087 9月12日,上海交通大学医学院浦东校区正式启用,浦东再添一所一流高校。 添加图片注释,不超过 140 字(可选)浦东校区的启用…...

nccl study

https://lgd.gd/posts/2021/03/nccl/ https://blog.csdn.net/u014443578/article/details/136902252...

AI服务器公开招标大面积失败,中国联通“招”了个寂寞?

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087为了查询三大运营商人工智能服务器的招投标信息,在工信部设立的“通信工程建设项目招标投标管理信息平台”上,搜索了一下有关…...

【GitHub每日速递 250916】2053 个 n8n 工作流曝光!365 种集成 + 可视化管理,效率直接拉满

原文:【GitHub每日速递 250916】2053个n8n工作流曝光!365种集成+可视化管理,效率直接拉满 Codebuff:开源AI编码助手,多模型协作胜Claude Code,还能深度自定义! codebuff 是一个通过终端生成代码的命令行工具。简单讲,它让你在终端里直接用AI生成代码,提升开发效率。适…...

每日一家公司职场内幕——龙旗科技(上海)

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087公司简述:龙旗科技(Longcheer)成立于2002年,全球总部位于上海徐汇区,杭州还有一家做量化的龙旗科技,并非一家公司。龙旗…...

0129_迭代器模式(Iterator)

迭代器模式(Iterator) 意图 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 UML 图优点简化访问接口:提供统一的遍历接口,简化客户端代码 封装内部结构:隐藏聚合对象的内部表示,提高安全性 支持多种遍历:可以在同一聚合上实现多种遍历方式 开…...

HJ7 取近似值

描述 对于给定的正实数 x,输出其四舍五入后的整数。更具体地说,若 x 的小数部分大于等于 0.5,则输出向上取整后的数;否则输出向下取整后的整数。 【提示】 不同编译器版本、不同系统环境对待实数的精度处理不同,我们建议您使用在线编译器进行调试。 输入描述: 输入一个小…...

读人形机器人13艺术领域

读人形机器人13艺术领域1. 艺术领域 1.1. 艺术始终是人类灵魂的深刻表达,是一面反映我们最深情感、思想和经历的镜子 1.2. 超越语言、文化和时间的界限,连接着不同世代的人 2. 机器人创作艺术和音乐 2.1. 如今,AI生成的艺术和音乐已不再是单纯的实验性产物,它们正逐渐成为创…...

活动报名:Voice First!Demo Day@Voice Agent Camp,9.22,上海丨超音速计划 2025

听腻了那些类比电影《Her》却无法真实落地的语音 AI 畅想?来 Demo Day@Voice Agent Camp,见证 「Voice First」理念下,真正创意和商业潜力兼具的初创项目。9 月 22 日下午,上海西岸数字谷,欢迎加入我们,一同重塑人机实时互动体验。demo 项目均来自「超音速计划 2025Voice…...

Windows计算器:现代C++实现的多功能计算工具

Windows计算器是一个用C++和C#编写的现代Windows应用程序,提供标准、科学和程序员计算功能,以及各种单位换算和货币转换功能,采用高精度算术运算确保计算准确性。项目标题与描述 Windows计算器是一个现代化的Windows应用程序,使用C++和C#编写,预装在Windows操作系统中。该…...

使用 PySide6/PyQt6 实现系统图标的展示与交互

在 Python 桌面应用开发中,系统图标的展示与选择是提升用户体验的重要环节。PySide6 和 PyQt6 作为 Qt 框架的 Python 绑定,提供了 QFileIconProvider 等核心类来实现这一功能。本文将以代码实例演示如何在两个框架中实现系统图标的可视化呈现与交互处理。 基础环境搭建与核心…...

如何让Java的线程池顺序执行任务 ?

一、基础概念 Java中的线程池本身并不提供内置的方式来保证任务的顺序执行的,因为线程池的设计目的是为了提高并发性能和效率,如果顺序执行的话,那就和单线程没区别了。 但是如果被问到想要实现这个功能该怎么做,有以下两种方式 1、使用单线程线程池 我们可以使用 SingleTh…...

Git 提交排除文件夹方法总结

在 Git 中排除某个文件夹(使其不被提交到远程仓库)有几种方法。以下是主要的解决方案:方法一:使用 .gitignore 文件(推荐) 这是最标准的方法,适用于大多数情况。创建或编辑 .gitignore 文件:# 如果还没有 .gitignore 文件 touch .gitignore在 .gitignore 中添加要排除的…...

如何在 Ubuntu24.04 TLS 上安装 Kubernetes 集群 - Antonie

0-先决条件 在开始安装之前,请确保您的环境满足以下先决条件:Ubuntu 24.04 LTS 系统。 至少 4GB RAM 或更多。 至少 2 个 CPU 内核。 有 40 GB 可用磁盘空间。1- 环境准备 集群规划k8s-node-1(Master):10.15.0.132 k8s-node-2(Worker):10.15.0.133 k8s-node-3(Worker)…...

Jmeter的插件开发

一、Jmeter的启动流程 在说启动流程之前我们先来看看Jmeter源码的各个重要的包:components—包含与协议无关的组件,如可视化、断言等等。 core —JMeter的核心代码,包括所有的核心接口和抽象类。 examples —演示采样器如何使用新bean框架的例子(开发插件前可以好好看看该包…...

Educational Codeforces Round 182 (Rated for Div. 2)

A. Cut the Array 题意:把数组分成三段,使得每段和模\(3\)后的值都相同或者都不相同。 \(n\)很小,暴力枚举分段就行了。点击查看代码 #include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int …...

java第二周课前提问

一、代码引入 public class Main {static void changeStr(String x) {x = "xyz";}static void changeArr(String[] strs) {for (int i = 0; i < strs.length; i++) {strs[i] = strs[i]+""+i;}}public static void main(String[] args) { String x = …...

java GC

java GC...

Redis最佳实践——性能优化技巧之监控与告警详解

一、监控体系构建1. 核心监控指标矩阵指标类别 关键指标 计算方式/说明 健康阈值(参考值)内存相关 used_memory INFO Memory 获取 不超过 maxmemory 的 80%mem_fragmentation_ratio 内存碎片率 = used_memory_rss / used_memory 1.0-1.5命中率 keyspace_hits INFO Stats 获取…...

week1

任务一,编码规范: 我在网上找到了华为公司C++编码规范,我摘下几点我觉得我应该注意的 1、程序块要采用缩进风格编写, 缩进的空格数为4个 2、不允许把多个短语句写在一行中, 即一行只写一条语句 3、 if、for、do、while、case、switch、default等语句自占一行, 且if、for、do…...

EF Core 与 MySQL:迁移和关系配置详解

EF Core 与 MySQL:迁移和关系配置详解 1. EF Core 中的关系类型 Entity Framework Core 支持三种主要的关系类型: 一对一关系 (One-to-One) 一个实体实例只与另一个实体实例相关联。例如:一个用户有一个用户资料。csharppublic class User {public int Id { get; set; }pub…...

《原子习惯》-读书笔记2

2025.09.15 Day2 1、目标和体系有什么不同?我最初是从“呆伯特漫画”的创作者斯科特亚当斯(Scott Adams)那里了解到两者的区别的。目标是关于你想要达到的结果,而体系是涉及导致这些结果的过程。2、争取每天都有进步是你走向成功唯一的方法。3、如果你想要得到更好的结果,那…...

CF1626D 题解

CF1626D 题解 貌似题解区没有这种解法。 题面 CF1626D Martial Arts Tournament - 洛谷 (luogu.com.cn) 思路 问题就是把 \(a\) 分成 \(3\) 个子集(可以为空),每两个子集里的数并不重复,把每个子集的大小补到 \(2^x\) 最少要补的数的个数。 先把 \(a\) 给排序,那么就可以转…...

Python 集合运算:并集、交集、差集全解析

在 Python 中,集合(set)是一种无序的、不包含重复元素的数据结构。集合提供了丰富的运算方法,包括并集、交集、差集等。这些运算在数据处理、数学计算和算法设计中非常实用。今天,就让我们一起深入学习 Python 集合的运算方法,并通过实例代码展示它们的使用。 一、集合的…...

第一周数据可视化作业

一、个人介绍 My name is Ou Qi. (🙂) 我性格阳光开朗,始终保持着对学习的热忱和对未知事物的探索欲,尤其从小就对数学有着浓厚兴趣 —— 课堂上会紧跟老师的思路深度思考,课后也常主动琢磨题型、尝试举一反三,在不断推导中把知识学扎实。 二、我的专业选择与学习历程 步…...

用 C++ + OpenCV + Tesseract 实现英文数字验证码识别

本文展示如何用 C++ 结合 OpenCV 做图像预处理,再调用 Tesseract OCR 识别验证码。适用于希望在高性能后端或本地服务里集成 OCR 的场景。方案包含: 更多内容访问ttocr.com或联系1436423940 环境与依赖安装 图像预处理(灰度、二值化、形态学去噪、放大) 使用 Tesseract API…...

java 第一节课课前提问

一、使用Java能编写的程序 企业级后端应用 Java 在企业级开发中占据重要地位,常被用于构建大型服务器端应用,如电商平台、银行交易系统、CRM(客户关系管理)系统等。这类应用通常需要处理高并发、复杂业务逻辑和海量数据,Java 凭借稳定的性能、丰富的企业级框架(如 Spring…...

二进制解码器、选通器和分配器

二进制解码器 3比特的二进制解码器可以由下图表示。每种组合方式对应着解码器的不同输出。3-8解码器可以用三个非门和三个与门构成解码器可以拼接起来组成更大的解码器,比如两个3-8解码器可以拼起来组成一个4-16解码器。选通器和分配器。 选通器 一个8选1的选通器如下图所示。…...

2025最新版 Photoshop软件免费下载安装完整教程(PS2025)超详细安装教程

Adobe Photoshop 2025 凭借升级的 AI 编辑功能、更优的图像处理效率,成为设计与摄影领域的热门工具。但不少用户在安装时,易因路径选择、安全软件拦截等问题卡壳。本教程聚焦安装全流程,从前期准备到后续配置,用清晰步骤帮你避开误区,顺利完成安装,快速解锁 PS 2025 的创…...

nac一键卸载软件脚本

将下面的代码保存为uninstall.sh: echo delete shit.app..need your root pwd; sudo rm -rf /Applications/dvc-manageproxy-exe.app; sudo rm -rf /Applications/LVSecurityAgent.app; echo script is fighting...; sudo chflags noschg /opt/LVUAAgentInstBaseRoot; sudo chf…...

交叉编译openharmony版本的openssh

sudo mkdir /systemsudo chmod 777 /system/export CC=aarch64-linux-gnu-gcc编译zlib./configure --prefix=/systemmake && make install 编译openssl./config linux-aarch64 --prefix=/system/ --openssldir=/system/etc/ssl --libdir=…...

为什么不建议在 Docker 中跑 MySQL

前言 今天我们来聊聊一个很有趣的话题:为什么我不建议在Docker中运行MySQL数据库? 有些小伙伴在工作中可能为了部署方便,习惯将所有组件都容器化,但数据库真的适合放在容器里吗? 今天就专门跟大家一起聊聊这个话题,希望对你会有所帮助。 一、容器化与数据库:天生的矛盾?…...

CFD

算例汇总 1、一维Sod激波管 2、二维平板 3、NACA0012 4、高马赫数喷流 5、双马赫反射 6、二维Riemann 7、二维Rayleigh-Taylor 8、TENO算例...

[MCP][05]Elicitation示例

Elicitation能让工具在关键时刻暂停执行,并向用户请求特定信息前言 如果你之前接触过LangGraph的"Human in the loop"概念,那么理解MCP的Elicitation机制就会容易很多。这两个功能非常相似,都是让AI在需要时停下来,礼貌地向人类寻求帮助或确认。 想象一下,当你正…...

Warsaw主题关闭导航条

\setbeamertemplate{headline}{}...

Python Socket网络编程(2)

进程:提供计算资源的单位 线程:真正工作的单位(cpu调度最小单元) GIL锁:全局解释器锁(是CPython解释器特有的,平时说的Python解释器一般都是CPython解释器,还有GPython等等) 让一个进程中同一时刻只能有一个线程可以被CPU调动。所以Python中应该是没有严格意义的多线程…...

PS2025安装包下载及PS2025安装包安装教程详细步骤(包含安装包下载链接)

在图像处理领域,Adobe Photoshop 一直占据着举足轻重的地位,而 PS 2025 更是汇聚前沿技术与实用功能,成为众多设计师与图像处理爱好者的得力工具。但初次安装这款软件,可能会因步骤繁杂、细节众多而让人感到棘手。别担心,本教程将以清晰、简洁的方式,带你一步步完成 PS 2…...

Nature Genetics | 本周最新文献速递

Multiancestry brain pQTL fine-mapping and integration with genome-wide association studies of 21 neurologic and psychiatric conditions 中文标题: 多祖先脑蛋白遗传调控解码!pQTL精细映射揭示神经精神疾病机制 关键词: 脑蛋白定量性状位点、精细映射、多祖先整合、…...

关于go里切片作为函数参数时是引用传递还是值传递

go语言中切片参数的值传递问题问题起因 写一道回溯算法题,把ans二维数组作为函数参数传入,想在函数里面,不停地append,最后返回ans 实际发现ans打印出来是空的,就很奇怪,因为我是事先分配好空间的,理论上不会发生扩容,底层数组是共用的,咋回事 func permute(nums []in…...

DRAN读写循环

DRAM读写循环 以一个8 * 8 的二维阵列为例子,假设部分存储单元为1,部分为0,现在要读写其中某一个cell的值。为了确定存储的位置,我们需要内存地址,为了传输内存地址,我们需要地址总线。8 * 8阵列一共有64个cell,我们需要6线地址总线,一共能表示64种二进制值。三根地址总…...

数据结构操作相关

堆 1、插入元素上滤每一次与父亲比较,满足大小就往上交换,直至不能往上为止。每次往上交换不会影响下面的性质2、删除/输出堆顶下滤假设大根堆,根节点换入末尾节点,每次先找出大儿子,若大儿子比自己大,则往下和他交换,直至不能往下为止。 3、建堆 1)初始为空,逐个inse…...

Neisbitt 不等式的证法

\(a,b,c\in R^+求证:\frac{a}{b+c}+\frac{b}{a+c}+\frac{c}{a+b}\geq\frac{3}{2}\) 证明: \(\because a,b,c\in R^+,\therefore\exists x,y,使得b=ax,c=ay\) \(\therefore LHS=\frac{1}{x+y}+\frac{x}{1+y}+\frac{y}{1+x}\) \(\therefore 令f(x,y)=\frac{1}{x+y}+\frac{x}{1+…...

端口转发神器Rinetd:轻量级安装与配置指南

什么是Rinetd? Rinetd(Redirection Internet Daemon)是一款轻量级的TCP端口转发工具,可以将来自一个IP地址和端口的连接转发到另一个IP地址和端口。它配置简单、资源占用少,是系统管理员和开发人员进行端口转发的理想选择。 Rinetd的主要特点轻量级:体积小,资源占用低 配…...