📌
SRE学习知识点
  • Initial page
  • 系统及网络编程
    • OSI七层和TCP/IP四层
    • TCP拆链的4次握手
    • select、poll和epoll的区别
    • 进程、线程、协程的区别
  • 系统命令相关
    • Top命令
    • AWK文本操作
  • SRE业务
    • Redis
    • CPU高排查
    • SLA SLO SLI
  • 算法类
    • 用数组和链表实现HashMap
    • 2个单向链表在某个地方相交,问如何求出第一个相交点
  • Mysql相关
    • InnoDB 存储引擎性能参数
Powered by GitBook
On this page

Was this helpful?

  1. SRE业务

CPU高排查

结合linux基本命令和jmap,jstack等工具。

根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。

通过ps aux | grep PID命令,可以进一步确定是哪个进程出现了问题。怎么定位到具体线程或者代码呢? 显示当前java进程的线程列表 ps -mp pid -o THREAD,tid,time

从中可以找到了耗时最高的线程28802。

其次将需要的线程ID转换为16进制格式: printf "%x\n" tid

本地打印线程的堆栈信息(注意主工程由于{}JVM Xms{}设置非常大,不可线上运行时执行!) jstack pid |grep tid -A 30

这样,对应异常找到出现问题的代码。

二,linux常用确认服务状态命令。

统计tcp连接状态: netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}'

统计用户进程当前操作句柄数:lsof -n|awk '{print $2}|'|sort|uniq -c |sort -nr|more

统计用户进程内部执行的线程数:ps -eLf|grep java|wc --l

查看运行时进程参数设置:cat /proc/pid/limits,cpuset及coredump_filter

查看当前某端口连接数:netstat -nat|grep -i "80" |wc -l

对连接的IP按连接数量进行排序:netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n (运维操作已放弃netstat,改为ss命令入侵更轻量)

Tcpdump访嗅访问数据包最高请求:tcpdump -i eth0 -tnn dst port 80 -c 1000

PreviousRedisNextSLA SLO SLI

Last updated 4 years ago

Was this helpful?