标签: 性能排查 - 文章列表
共 2 页 · 清除标签筛选
-
Node.js接口响应变慢与事件循环阻塞的排查方法(monitorEventLoopDelay测延迟、UV_THREADPOOL_SIZE调整libuv线程池与worker_threads拆分CPU任务)
Node.js接口慢但CPU不高、内存正常,多半是事件循环被占住。本篇讲用monitorEventLoopDelay量出p99延迟,区分主线程同步阻塞与libuv线程池排队两类成因,梳理JSON大报文、正则回溯、同步加密、nextTick递归等常见写法,给出UV_THREADPOOL_SIZE调整与worker_threads拆分的做法。
-
Java报错Connection is not available, request timed out after 30000ms的排查方法(HikariCP连接池耗尽、连接泄漏定位与maximumPoolSize调整)
HikariCP报Connection is not available, request timed out after 30000ms,多数是连接池被打满。本篇讲清报错括号里total、active、idle、waiting四个数字的读法,用leakDetectionThreshold抓出泄漏堆栈,梳理queryForStream、事务里调外部接口等四种不还连接的写法,以及maximumPoolSize、maxLifetime、keepaliveTime的取值牵制。
-
Go程序CPU占用过高与内存持续上涨的pprof定位方法(火焰图、heap profile与goroutine泄漏排查)
Go服务CPU爬到80%以上或者内存一天涨几百MB下不来时,top只能看到进程号。这篇记录用Go自带的pprof定位到具体函数:端点怎么挂才不暴露公网、top与top -cum的flat和cumulative差别、heap的inuse_space与alloc_space两个视角、用-base做差找泄漏点、goroutine的debug=1与debug=2读法、block与mutex的采样开关,以及Go 1.25、1.26、1.27里新增的相关能力。数据截至2026年10月。
-
Linux服务器iowait偏高与磁盘IO打满的排查方法(iostat与iotop定位进程、await队列分析与脏页回写参数调整)
服务器top里wa很高但CPU空闲,多半是磁盘IO堵了。文中给出固定排查顺序:vmstat看b列确认是否有进程卡在IO上,iostat -x看r_await、w_await与aqu-sz判断堵塞程度,iotop、pidstat与/proc/PID/io定位到进程,biosnoop与blktrace下钻到文件和块层,fio打基线,最后调整vm.dirty_ratio等脏页回写参数与IO调度器。附各参数默认值。
-
Nginx报错504 Gateway Time-out的排查方法(upstream timed out定位、proxy_read_timeout与fastcgi_read_timeout配置)
504 Gateway Time-out与502的区别在于后端只是慢,不是挂了。按error.log里upstream timed out尾部的connecting、sending、reading三个词,定位该改proxy_connect_timeout、proxy_send_timeout还是proxy_read_timeout,默认值都是60s,连PHP-FPM时换成fastcgi_read_timeout。再把两个耗时变量打进日志找出慢URL,核对PHP的max_execution_time 30s与MySQL锁等待50s。
-
Android应用ANR无响应的排查方法(Input dispatching timed out定位、/data/anr堆栈抓取与主线程卡顿修复)
App弹出无响应对话框时,logcat里Reason那一行的报错串决定了排查方向。记录四类ANR的超时阈值、用adb bugreport抓取/data/anr堆栈的方法、main线程状态与CPU usage段的读法,以及StrictMode与主线程消息耗时埋点的用法。
-
Java报错RejectedExecutionException与线程池任务堆积的排查方法(ThreadPoolExecutor参数、四种拒绝策略与Spring Boot默认线程池配置)
线上抛RejectedExecutionException时,报错串里的pool size、queued tasks已经把现场说清楚了。记录execute()的四级流转、四种拒绝策略的取舍、Spring Boot默认线程池无界队列带来的隐性问题,以及用jstack与打点定位堆积任务的做法。
-
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监控做法。
-
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打散的具体做法。
-
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、容器内存的换算思路。