编程技巧 - 文章列表
-
Nginx报错502 Bad Gateway的排查方法(connect() failed与upstream prematurely closed connection定位、proxy_read_timeout与keepalive配置)
502 Bad Gateway基本都出在nginx与后端之间这一段。按error.log里的报错串分成四种情况定位:connect refused、upstream prematurely closed、upstream timed out、no live upstreams,再配keepalive与三个proxy超时参数,附上ss、curl与文件描述符的检查命令。
-
npm install报错ERESOLVE unable to resolve dependency tree的解决方法(peer依赖冲突定位与overrides覆盖)
npm install报ERESOLVE时先读报错定位冲突的两个包:确认npm与Node版本、对齐peer依赖范围、用overrides钉住嵌套依赖版本、npm ls与npm explain查来源,文中给出--legacy-peer-deps与--force的适用场景与区别。
-
SSH登录报错Permission denied (publickey)的排查与解决方法(ssh -vvv定位、密钥权限修复与OpenSSH 8.8算法变更)
公钥登录报Permission denied (publickey)时按7个检查点排查:ssh -vvv看卡在哪一步、sshd -T确认实际生效配置、.ssh与authorized_keys的权限属主、OpenSSH 8.8禁用ssh-rsa的算法变更、用户名与端口、服务端日志定位,文中命令可直接复制执行。
-
MySQL报错Deadlock found when trying to get lock的排查方法(SHOW ENGINE INNODB STATUS定位死锁与加锁顺序调整)
业务日志里出现ERROR 1213 Deadlock found when trying to get lock,说明InnoDB检测到循环等待并回滚了其中一个事务。本文讲如何用SHOW ENGINE INNODB STATUS读取LATEST DETECTED DEADLOCK段、用innodb_print_all_deadlocks留档、8.0的performance_schema.data_lock_waits查当前等待关系,以及加锁顺序、间隙锁、锁升级三类成因的改法。
-
Docker容器退出码137与OOMKilled的排查方法(docker inspect定位、内存限额调整与JVM容器感知)
容器跑着跑着自己就没了,docker ps -a里显示Exited (137),应用日志毫无异常。137等于128加9,是进程被SIGKILL杀掉的信号。本文讲如何用docker inspect确认OOMKilled、翻dmesg内核记录、读cgroup v2的memory.events拿到真实用量,以及不同退出码139、143的区别。
-
PHP-FPM日志报server reached pm.max_children setting的排查与解决方法(pm.max_children计算与slowlog定位慢请求)
nginx日志刷connect() to unix:/run/php/php8.2-fpm.sock failed (11: Resource temporarily unavailable),php-fpm日志报server reached pm.max_children setting,多半是worker被占满。给出fpm-status状态页、按内存算pm.max_children的公式、pool配置示例、slowlog抓慢请求,以及OOM与listen.backlog的排查。
-
远程桌面报错出现身份验证错误,要求的函数不受支持的解决方法(CredSSP加密Oracle修正与注册表AllowEncryptionOracle)
远程桌面连接报「出现身份验证错误,要求的函数不受支持」,多半是2018年5月那批CredSSP加密Oracle修正补丁把默认策略改掉所致。给出报错原文、CVE-2018-0886背景、组策略与注册表AllowEncryptionOracle三种取值、客户端与服务端的改法,以及各系统对应的补丁号。
-
Maven依赖冲突报错NoSuchMethodError与ClassNotFoundException的排查方法(dependency:tree定位与exclusions排除)
本地IDE运行正常、打成jar上线就报NoSuchMethodError或ClassNotFoundException,根因是classpath上同一个类存在两份版本。文章给出getProtectionDomain定位jar来源、dependency:tree与-X查omitted for conflict with仲裁结果、exclusions与dependencyManagement两种解法、enforcer插件构建期拦截,以及fat jar与scope写错的排查。
-
Redis报错MISCONF Redis is configured to save RDB snapshots的解决方法(stop-writes-on-bgsave-error、fork失败与目录权限排查)
Redis写入报MISCONF Redis is configured to save RDB snapshots,读正常写被拒,根因是上一次bgsave失败被Redis记住。按排查顺序给出info persistence确认状态、journalctl查真实报错、目录属主与systemd ProtectSystem、vm.overcommit_memory导致fork失败、容器/data挂载与SELinux上下文处理,以及config set止血后如何固化配置。
-
Linux下crontab定时任务不执行的排查与解决方法(PATH环境变量、百分号转义与日志定位)
脚本手动跑正常、放进crontab就不执行的排查记录:cron与crond服务状态、journal与/var/log/cron日志、PATH只有/usr/bin:/bin、百分号必须转义、5段与6段用户字段、/etc/cron.d属主与权限、CRLF行尾、时区与容器UTC,附一套env -i空环境复现命令。