【面试突击】生产环境面试实战

生产环境面试实战

CPU 占用率 100% 该怎么解决

这属于是生产环境中的问题了,主要考察有没有 linux 中排查问题的经验,以及对 linux 排查问题的命令是否熟悉

  1. 首先查看 cpu 使用率

显示 cpu 使用率,执行完该命令后,输入 P,按照 cpu 使用率排序

使用 top -c 命令,找到占用 cpu 最多的进程 id(找 java 项目的)

  1. 查看占用 cpu 最多的进程中每个线程的资源消耗

通过 top -Hp <进程id> 命令,显示这个进程中所有【线程】的详细信息,包括每个线程的 CPU 使用率、内存使用情况、线程状态

找到 cpu 使用率最高的那个 java 进程,记下进程 id

  1. 将占用 cpu 最高的线程的线程 id 转成 16 进制

通过 printf "%x\n" <线程id> 命令输出这个线程 id 的 16 进制

  1. 定位哪段代码导致的 cpu 使用率过高:jstack 43987 | grep ‘0x41e8’ -C5–color’

通过命令 jstack <进程id> | grep '<16进制线程id>' -C5--color 定位到占用 cpu 过高的代码

jstack 生成该进程的堆栈信息,通过线程的 16 进制线程 id 过滤出指定线程的信息

-C5 表示显示匹配行的 5 行上下文

–color:高亮显示,方便阅读

线上机器的进程用 kill 命令杀不死怎么办?

这也是生产环境的问题,还是考察对 linux 命令了不了解,可以看一下,扩展一下思路

这种情况下,一般是因为你使用 kill 命令杀的这个进程是一个子进程,这是因为子进程释放了资源,但是没有得到父进程的确认,就导致这个子进程变成了 僵尸进程,也就是 zombie 状态

这种情况,一般将这个僵尸进程的父进程给 kill 掉即可

  1. 先找到这个僵尸进程

使用命令 ps aux,找到 STAT 这一栏为 Z 的进程,就是僵尸进程,记下进程 id

  1. 找到僵尸进程的父进程 id

使用命令 ps -ef | grep <僵尸进程id>

  1. 杀死父进程 id

通过 kill 命令杀死父进程即可

如果线上机器磁盘快要写满了,该怎么办?

其实线上机器的磁盘写满,基本上都是日志导致磁盘写满了,这里考察的就是 linux 中查看磁盘占用的命令

  1. 查看磁盘使用情况

使用命令 df -h 查看磁盘的使用情况

  1. 清楚比较老的日志

找到系统部署的位置,找一下日志在哪里存储,删除掉一些日期比较旧的日志即可

  1. 预防

可以写一个 shell 脚本,定时删除 7 天之前的日志数据

快捷查找:

可以通过命令

find / -size +100M | xargs ls -lh

快速找到在根目录下,大于 100M 大小的文件

也可以使用命令

du -h > fs_du.log

会扫描当前执行命令的目录以及子目录中磁盘的使用情况,并将结果输出到 fs_du.log 文件中

也可以执行扫描目录,例如扫描 /path 目录下

du -h /path > fs_du.log

你可能感兴趣的:(面试突击,面试,java,职场和发展,linux,cpu占用率过高,生产问题排查)