🌈🌈🌈🌈🌈🌈🌈🌈
欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!在我后台回复 「资料」 可领取
编程高频电子书
!
在我后台回复「面试」可领取硬核面试笔记
!文章导读地址:点击查看文章导读!
感谢你的关注!
🍁🍁🍁🍁🍁🍁🍁🍁
生产环境面试实战
CPU 占用率 100% 该怎么解决
这属于是生产环境中的问题了,主要考察有没有 linux 中排查问题的经验,以及对 linux 排查问题的命令是否熟悉
- 首先查看 cpu 使用率
显示 cpu 使用率,执行完该命令后,输入 P,按照 cpu 使用率排序
使用 top -c
命令,找到占用 cpu 最多的进程 id(找 java 项目的)
- 查看占用 cpu 最多的进程中每个线程的资源消耗
通过 top -Hp <进程id>
命令,显示这个进程中所有【线程】的详细信息,包括每个线程的 CPU 使用率、内存使用情况、线程状态
找到 cpu 使用率最高的那个 java 进程,记下进程 id
- 将占用 cpu 最高的线程的线程 id 转成 16 进制
通过 printf "%x\n" <线程id>
命令输出这个线程 id 的 16 进制
- 定位哪段代码导致的 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 掉即可
- 先找到这个僵尸进程
使用命令 ps aux
,找到 STAT 这一栏为 Z 的进程,就是僵尸进程,记下进程 id
- 找到僵尸进程的父进程 id
使用命令 ps -ef | grep <僵尸进程id>
- 杀死父进程 id
通过 kill 命令杀死父进程即可
如果线上机器磁盘快要写满了,该怎么办?
其实线上机器的磁盘写满,基本上都是日志导致磁盘写满了,这里考察的就是 linux 中查看磁盘占用的命令
- 查看磁盘使用情况
使用命令 df -h
查看磁盘的使用情况
- 清楚比较老的日志
找到系统部署的位置,找一下日志在哪里存储,删除掉一些日期比较旧的日志即可
- 预防
可以写一个 shell 脚本,定时删除 7 天之前的日志数据
快捷查找:
可以通过命令
find / -size +100M | xargs ls -lh
快速找到在根目录下,大于 100M 大小的文件
也可以使用命令
du -h > fs_du.log
会扫描当前执行命令的目录以及子目录中磁盘的使用情况,并将结果输出到 fs_du.log 文件中
也可以执行扫描目录,例如扫描 /path 目录下
du -h /path > fs_du.log