Linux面试最高频的5个基本问题( 二 )
查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep “cpu cores” | uniq
查看逻辑CPU的个数
cat /proc/cpuinfo| grep “processor”| wc -l
CPU负载很高 , 利用率却很低 , 说明处于等待状态的任务很多 , 负载越高 , 代表可能很多僵死的进程 。 通常这种情况是IO密集型的任务 , 大量任务在请求相同的IO , 导致任务队列堆积 。
生产环境造成CPU利用率低负载高的具体场景常见的有如下几种 。
进程在cpu上面运行需要访问磁盘文件 , 这个时候cpu会向内核发起调用文件的请求 , 让内核去磁盘取文件 , 这个时候cpu会切换到其他进程或者空闲 , 这个任务就会转换为不可中断睡眠状态 。 当这种读写请求过多就会导致不可中断睡眠状态的进程过多 , 从而导致负载高 , cpu低的情况 。
我们都知道MySQL的数据是存储在硬盘中 , 如果需要进行sql查询 , 需要先把数据从磁盘加载到内存中 。 当在数据特别大的时候 , 如果执行的sql语句没有索引 , 就会造成扫描表的行数过大导致I/O阻塞 , 或者是语句中存在死锁 , 也会造成I/O阻塞 , 从而导致不可中断睡眠进程过多 , 导致负载过大 。
同样 , 可以先通过top命令观察 , 假设发现现在确实是高负载低使用率 。
本文插图
然后 , 再通过命令ps -aux查看是否存在状态为D的进程 , 这个状态指的就是不可中断的睡眠状态的进程 。 处于这个状态的进程无法终止 , 也无法自行退出 , 只能通过恢复其依赖的资源或者重启系统来解决 。 以下图中没有D状态的进程 。
本文插图
Linux上进程的五种状态
- R (TASK_RUNNING):可执行状态 , 只有在该状态的进程才可能在CPU上运行 。 而同一时刻可能有多个进程处于可执行状态 。
- S (TASK_INTERRUPTIBLE):可中断的睡眠状态 , 处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量) , 而被挂起 。
- D (TASK_UNINTERRUPTIBLE):不可中断的睡眠状态 , 进程处于睡眠状态 , 但是此刻进程是不可中断的 。 TASK_UNINTERRUPTIBLE状态存在的意义就在于 , 内核的某些处理流程是不能被打断的 。
- T (TASK_STOPPED or TASK_TRACED):暂停状态或跟踪状态 。
- Z (TASK_DEAD - EXIT_ZOMBIE):退出状态 , 进程成为僵尸进程 。 进程已终止 , 但进程描述还在 , 直到父进程调用wait4系统调用后释放 。
- 恐龙|世界上最重要的8种恐龙,可能与你想象的不同
- 太阳系|825亿公里外!如果外星人飞船来到太阳系,这里最有可能发现它
- 三星|流畅用三年,两千价位机型,为什么说这款最值得买?
- 德尔塔|新冠病毒“最厉害变种”来袭,或从艾滋病患者体内进化而来
- 美团|支付二维码管制,微信、支付宝躺枪,谁是最大赢家?
- 外星人绑架|贝蒂安德烈事件,美国最离奇的外星人绑架案,至今仍是谜?
- 英伟达|「资讯」NV最强AI黑科技?能将文字描述一键转为逼真画像
- MIUI|国人最期待安卓系统曝光:MIUI 13增加新功能,强化互联功能
- iphone12|它是4000左右性价比最高的iPhone之一,买它不后悔!
- CPU|本月装机推荐,适合大多数人的最佳游戏CPU,intel还是AMD?