2025-03-20
linux相关
00

单词统计

  • 完整命令
sh
cat words.txt | tr -s ' ' '\n' | sort | uniq -c | sort -r | awk '{ print $2, $1 }'
2025-03-14
linux相关
00

shell脚本杀死进程以及子进程

sh
function kill_processes() { local pid=$1 if [ -f /proc/$pid/status ]; then for subpid in $(ps -e o pid=,ppid= | awk -vPID=$pid '{if($2==PID)print $1;}'); do kill_processes $subpid done fi if [ -f /proc/$pid/status ]; then kill -9 $pid fi }
2025-03-14
其他
00

本次说明只涵盖mac的操作

  • command + w 删除当前页面
  • command + option + -> or <- 进行页面左右切换
  • command + 数字跳转到对应的页面
  • command + shift + t 恢复关闭的页面
2025-03-13
linux相关
00

linux

正则表达式

image.png

2025-03-12
pyhton
00

背景

在生产环境中,我们使用了 pymysql 和 DBUtils.PooledDB 来管理 MySQL 数据库连接池。由于业务量激增,新增了多个业务实例,最终导致 MySQL 集群以及本地实例的连接数被打满,无法建立新的请求连接。经过排查,发现根本原因是 pymysql 默认开启事务,所有的 SQL 操作(包括查询)都会自动开启事务,并且不会自动提交,导致事务长时间占用连接,无法释放。

问题原因

1. 默认事务行为
  • pymysql 默认 autocommit=False: pymysql 默认不自动提交事务,也就是说,每执行一次 SQL 操作(包括查询)都会启动一个事务。如果在业务代码中没有显式调用 commit() 或 rollback(),那么这个事务就一直处于挂起状态。
2. 连接池连接占用
  • 事务不释放连接: 当一个连接处于挂起事务状态时,即使执行的是查询操作,该连接也不会被释放回连接池。随着大量任务的执行,长时间未提交的事务不断占用连接池中的连接,最终导致连接数打满。
3. 业务实例增加导致压力骤增
  • 新增业务实例后,同时发起的大量请求进一步加剧了连接数的压力,最终导致 MySQL 集群无法创建新的请求连接。