BLCL的博客小馆

首页

关于

归档

MySQL 大表查询内存溢出Python 生成器 yield 内存泄漏ThreadPoolExecutor 任务队列积压SSCursor 流式游标使用数据库结果集客户端缓存Python 信号量限流控制并发线程池无界队列内存爆炸生产者消费者背压实现MySQL 百万级数据批量处理优化Python 多线程数据迁移内存优化ThreadPoolExecutor shutdown 死锁问题数据库连接池与游标类型选择

Python脚本使用yield与线程池处理MySQL300万行数据查询内存飙升优化

前段时间处理一个数据批量更新任务,需要从 MySQL 表中读取大约 300 万条记录,经过一系列逻辑处理(调用外部 API 更新标签)后写回。为了控制资源,我使用了 ThreadPoolExecutor 配合生成器逐条产出数据,期望做到“边读边处理”,避免一次性加载全部结果集。 然而上线后观察监控,发现 Python 进程的内存占用随着迭代不断攀升,最终几乎吃满机器内存,导致 OOM 风险。最初直觉是 yield 没有真正实现流式,或者数据库驱动缓存了全部结果,但深入排查后发现事情没那么简单。 初始代码结构 简化后的核心代码如下: from mysql.connector.pooling import MySQLConnectionPool dbpool = MySQLConnectionPool() def..

更多
Elasticsearch 评分机制Elasticsearch 排序term terms 评分差异bool 查询filter shouldsort _scorefunction_score 时间衰减BM25 评分Elasticsearch 性能优化相关性排序混合排序搜索结果排序Elasticsearch 踩坑二级排序minimum_should_matchtrack_scoresrewrite scoring_boolean精确匹配 评分全文检索 排序ES 查询 DSL 实战

Elasticsearch排序与评分机制记录:关于term和terms权重与filter和should

最近在优化一个全文检索业务时,遇到了一个典型的排序场景:用户要求搜索结果首先按相关性排序,相关性相同时按创建时间倒序。听起来很简单对吧?但当我真正上手写 DSL 时,才发现 must、filter、should 以及 sort 之间的微妙关系远比想象中复杂。 研究发现了 term 查询在 must 与 filter 中的评分差异、terms 为何默认得分恒定、以及如何利用 bool + should + sort 实现“硬过滤 + 软评分”的混合排序。 问题背景 业务场景是文章搜索,核心需求如下: 硬性筛选:只返回状态为 published、且创建时间在某个时间点之后的文章。 相关性排序:根据用户输入的关键词(如标签、作者)计算匹配度,分数越高越靠前。 时间兜底:当两篇文章的相关性分数完全一致时,最新的文章排..

更多
sentence-transformers Docker 镜像优化Docker 镜像体积过大 解决方案Python Docker 瘦身 实战sentence-transformers 部署 容器化PyTorch CPU 版 Docker 安装Docker 多阶段构建 PythonEmbedding 模型 容器 部署 优化Dockerfile 最佳实践 2026sentence-transformers 镜像 8GB 缩减RAG 项目 Docker 部署 优化

Sentence-Transformers Docker 镜像从 8GB 到 2GB 的优化实录

问题背景 最近在做一个 RAG 相关的项目,需要把基于 sentence-transformers 的 embedding 服务打包成 Docker 镜像部署。项目本身不算复杂,依赖也就那么几个,结果 docker build 跑完之后一看——8GB。 镜像推送到私有仓库要等半天,开发机拉取一次占掉小半个硬盘。更麻烦的是,每次改一行代码重新构建,整个流程又来一遍。 问题定位 先看 Dockerfile,写得很“标准”: FROM python:3.11 COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "app.py"] requirements.txt..

更多
MySQL升级MySQL 8.0.28MySQL 8.4.7ERROR 1524mysql_native_passwordcaching_sha2_passwordMySQL LTS数据库升级MySQL兼容性utf8mb4AUTO_INCREMENT外键约束sql_modeMySQL升级检查器DBA运维MySQL版本迁移

MySQL 8.0.28 到 8.4.7 升级问题排查记录

最近把一个项目的 MySQL 从 8.0.28 升级到了 8.4.7。表面上看是跨了一个小版本号,但 8.4 是 MySQL 首个正式的 LTS(长期支持)版本,和 8.0 之间存在着不少 breaking changes。8.0 的常规支持已经在 2026 年 4 月结束,继续停留在 8.0 意味着后续安全更新和 bug 修复会越来越少。升级势在必行,但过程并不像想象中那么平滑。 这篇文章把整个升级过程中遇到的问题和排查思路记录下来,给同样在做这个升级的同行一个参考。 升级前的准备 正式动手之前,官方文档明确建议先用 MySQL Shell 的升级检查器跑一遍兼容性评估: util.checkForServerUpgrade('root@localhost:3306', {targetVe..

更多
MathJaxMathMLmunderstretchyaccentKatexMathJax MathML 下划线过短MathML munder 下划线不拉伸U+2015 stretchy 属性― 下划线太短MathJax 导出 MathML 显示异常MathML accent true 拉伸失效underline MathML 渲染问题MathJax 填空线下划线长度不对MathML 运算符字典 stretchyMathJax 原生 MathML 兼容性

MathJax导出MathML下划线过短问题排查与修复方案

最近在处理公式跨系统迁移需求时,遇到一个 MathJax 导出 MathML 的典型兼容性问题:LaTeX 中下划线公式在 MathJax 渲染SVG显示正常,但导出 MathML 交给浏览器原生或第三方引擎渲染后,下划线长度严重缩短,完全达不到预期宽度。这里完整记录排查过程最终选择的方案。 问题复现 原始 LaTeX 公式为一段带长度的填空下划线,写法如下: \underline{\hspace{2em}} cm 通过 MathJax v3 序列化导出后,得到的 MathML 代码为: <math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> <munder> ..

更多
pandocwpsoffice wordjavaOOXMLMathJaxMathMLdocxDejaVuMathTeXGyreCambria Mathlatex

基于 Java 内存流的 Pandoc 转 Word 公式乱码精准修复方案

最近在使用 Pandoc 将包含复杂数学公式(如 MathJax 或 MathML)的 HTML 转换为 .docx 格式时,生成的文档在 Microsoft Word 中通常能够正常显示,但在 WPS Office 中打开时,公式出现字体正体斜体错误。 问题排查到是pandoc和office都是默认使用Cambria Math作为公式字体,能准确处理数学中的斜体和正体。但是wps中默认不包含这个字体,所以没法正常渲染。wps默认使用DejaVuMathTeXGyre作为公式字体,却没有被包含在pandoc和word中。所以pandoc转化的docx文件要额外处理字体问题。 第一点, Cambria Math字体不在wps,也默认不在系统里,pandoc的docx模板需要自带包含字体,这个问题不大。 第二点,生..

更多
DockerContainerd磁盘空间docker-root运维迁移

关于Docker 29之后的镜像存储配置的变更

上周五晚上我正在撸代码,突然收到疯狂报警,服务器 / 分区使用率 92%!”。 登录服务器一看,根目录确实快满了,但 /data(挂载在 vdb 上)还有大把空闲。但是我早就把 Docker 的 data-root 迁到 vdb 上了,怎么系统盘还是被撑爆了? df -h 看了一眼,overlay 挂载点确实显示在 vdb 上,空间还很充裕。但 du -sh / 一查,根目录下 /var/lib/containerd 赫然占了 24GB! overlay挂载目录和实际存储目录不在同一个地方,这什么情况,之前的服务器都没有出现过这个情况。 一、问题检查 # 明明设了 data-root 到 /data/docker $ docker info | grep "Docker Root Dir"..

更多
DifyCeleryGunicornGeventAI Agent高并发性能调优

Dify 生产环境性能调优:API 并发与 Celery 后台任务参数实践

一、问题背景 最近在整一个大模型的项目,生产环境用的是一台标准的 8核 16G 云服务器,上面自己独立部署了 Dify 平台。 我们的业务主要已AI对话+工作流为主,没有大文件处理和知识库管理。 不玩重活:完全没有大文件解析、数据集批量导入,或者知识库切片这种疯狂吃内存的“重体力活”。 全是业务:纯粹的 Workflow 工作流和 Agent 智能体调度,里面塞满了各种大模型(LLM)节点,而且基本全是 Stream 流式输出。 刚上线并发一上来,前端和 API 就频繁蹦出 504 Gateway Timeout。去服务器上一看,16G 内存还剩一大截,但 CPU 各个核心忙得不均匀,Web 请求排大队。 进一步排查发现,Dify 的默认配置(尤其是官方 docker-compose.yml 及 .env ..

更多
mysql内存溢出mysql优化out of memory

一次MySQL排序内存溢出的排查与解决实录

我昨天刚踩完这个坑,顺手把排查过程整理了一下,希望能帮你省点时间。 事情是这样的 昨天下午,我正美滋滋地写着代码,突然监控告警响了。点开一看,一个跑了半年的MySQL服务挂了,日志里躺着一行刺眼的红字: Out of sort memory, consider increasing server sort buffer size 说实话,看到这个报错我第一反应是——哪个憨憨写了没索引的大排序?后来一查,不是代码的问题,是数据量涨上来了,原来默认的256KB真扛不住了。 所以今天我就把整个排查和解决过程记录下来,希望对遇到同样问题的你有点帮助。 先说说这个报错是啥意思 MySQL在执行ORDER BY或者GROUP BY的时候,如果数据量太大,内存里放不下,就会把数据临时写到磁盘上。但是呢,MySQL有个参..

更多
FTPdockerrclonecurlftpfsSMB

Linux 云存储挂载记录:从 FTP 到 Docker 容器共享

一份手记,记录我在使用 rclone、FTP、SMB 和 Docker 时踩过的坑与解决方案。 最近给公司搭建共享文件服务,遇到一大堆坑。记录一下,查了一堆办法,没有完美解决问题。mac上无法读写ftp,所以想着把ftp挂载到目录,然后把目录用samba共享出去。几个服务都在docker环境中运行。 1. Linux 挂载 FTP 的传统方式 1.1 为什么 mount 不能直接挂载 FTP? mount 命令是为内核支持的文件系统(如 ext4、NFS、CIFS)设计的,而 FTP 是一个应用层协议,并非文件系统。因此,执行 mount -t ftp ... 会直接报错,也无法在 /etc/fstab 中直接配置。 1.2 curlftpfs:基于 FUSE 的挂载工具 curlftpfs 利用 FUSE(用..

更多