编程技巧 - 文章列表
-
Python报错ModuleNotFoundError: No module named的排查方法(sys.path查找顺序、文件名与标准库同名冲突、pip装到别的Python版本定位)
Python报ModuleNotFoundError不只是没装库:先确认跑的是哪个解释器、pip装到了哪,再看sys.path的查找顺序、文件名与标准库同名被顶掉、循环导入与相对导入报错、__pycache__残留,以及PyInstaller打包后需要补hidden-import的几种情况。
-
Kafka消费堆积Consumer Lag的排查方法(kafka-consumer-groups查看LAG、分区数与消费者数不匹配与max.poll.interval.ms超时定位)
Kafka消费堆积时先看每个分区的LAG:用kafka-consumer-groups.sh --describe定位堆积分区,再依次排查分区数少于消费者实例、max.poll.interval.ms超时触发rebalance、offsets.retention.minutes过期导致位移重置、消费逻辑本身慢这几类成因,并给出--reset-offsets止损与Burrow监控做法。
-
Windows计划任务不执行与上次运行结果0x1、0x41301的排查方法(起始位置、批处理登录权限与事件日志定位)
计划任务配好却一次没跑成功,状态栏显示0x1。记录上次运行结果三类返回码的区分方法:0x1是程序自己的退出码、0x413xx是任务状态、0x8007xxxx是Windows错误码;wevtutil打开任务历史记录与103、201、332等关键事件ID的读法;起始位置多加引号导致0x8007010B的处理;以及账户密码过期、缺少批处理登录权限、电源条件与错过启动时间这些默认值造成的静默跳过。
-
Redis大key与热key的排查与解决方法(redis-cli --bigkeys、--memkeys与--hotkeys定位、UNLINK删除与拆分打散)
Redis内存莫名上涨、接口延迟抖动、主从同步变慢,多半是大key或热key在作怪。记录redis-cli --bigkeys、--memkeys、--hotkeys三个扫描器的用法与版本要求,MEMORY USAGE与OBJECT ENCODING确认单个key体量,SLOWLOG与LATENCY DOCTOR佐证,以及UNLINK异步删除、lazyfree配置、大key拆分与热key打散的具体做法。
-
ASP.NET Core启动报错Unable to resolve service for type的解决方法(依赖注入注册遗漏、生命周期不匹配与循环依赖排查)
ASP.NET Core报Unable to resolve service for type时,attempting to activate后面的类型不是问题所在,找不到的才是它前面那个。这篇按注册遗漏的六种形态逐个过一遍:只注册实现类、泛型写法、键控服务漏[FromKeyedServices]、扫描注册被条件筛掉、Controller没进容器、扩展方法忘了调;再讲生命周期错配那条Cannot consume scoped service与循环依赖的拆法,以及ValidateOnBuild默认开启之后老项目为什么一升级就报错。
-
PHP报错Allowed memory size of 134217728 bytes exhausted的解决方法(memory_limit调整、memory_get_usage定位与内存泄漏排查)
PHP报Allowed memory size of 134217728 bytes exhausted时,括号里的tried to allocate不是已用内存,报错行号也不一定是真凶。这篇从php.ini与FPM pool配置的区别讲起,给出php_admin_value、.user.ini、ini_set、php -d四种改法的生效范围与各自的坑,再用memory_get_usage打点定位大文件一次性读取、fetchAll、GD大图这类写法,并给出memory_limit取值与pm.max_children、容器内存的换算思路。
-
Linux服务器端口访问不通的排查方法(Connection refused、Connection timed out与No route to host的区分定位)
同样是连不上,Connection refused秒回、Connection timed out等满超时、No route to host又是另一层。按三种报错串分诊,给出ss、nc、curl、nft、tcpdump、ping -M do与iperf3的定位命令,覆盖监听地址、安全组、rp_filter与MTU几类常见原因。
-
MySQL主从复制延迟与报错1236、1062的排查与解决方法(Seconds_Behind_Master、Slave_SQL_Running为No与并行复制调整)
从库Seconds_Behind_Master持续增大、Slave_SQL_Running变成No、报错1236与1062,分别指向IO线程、SQL线程与回放性能三类原因。给出SHOW REPLICA STATUS各字段的读法、binlog保留期检查、并行复制参数调整和大事务定位的完整命令。
-
Go报错fatal error: concurrent map read and map write的排查与解决方法(go run -race定位、sync.RWMutex与sync.Map选型)
map并发读写触发的不是普通panic,defer里的recover拦不住它,进程直接退出。这篇把整条排查链路写清楚:从hashWriting标志位说明为什么recover无效,到用go run -race与go test -race复现定位,再到Windows下mingw-w64版本不足导致-race编不过的处理办法,最后给出sync.Mutex、sync.RWMutex、sync.Map与channel四种写法的取舍,以及struct内嵌map、range期间写入这类容易被漏掉的并发入口。
-
报错丢失MSVCP140.dll、VCRUNTIME140.dll与应用程序无法正常启动0xc000007b的解决方法(VC++运行库版本对应、32位与64位混用排查、/MT与/MD)
程序在本机跑得好好的,拷到另一台机器就弹丢失MSVCP140.dll,或者只给一个0xc000007b的框。这类报错多数不是没装运行库,而是架构位数混了或加载顺序出了岔子。文中给出VC++运行库与Visual Studio 2015、2017、2019、2022、2026的版本对应关系,用注册表和文件属性确认装没装,用dumpbin与Dependencies查32位与64位混用,用安装日志看懂0x80070666这类退出码,最后讲清/MT静态链接和CMake侧的配法。