前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈谈 Linux 假死现象

谈谈 Linux 假死现象

作者头像
iMike
发布2019-06-02 21:15:17
7.1K1
发布2019-06-02 21:15:17
举报
文章被收录于专栏:运维之美运维之美
  • 什么是假死现象

所谓假死现象,是指 Linux 内核 Alive,但是其上的某个或所有操作的响应变得很慢的现象。

具体比较常见的现象有如下几种:

  1. 能 Ping 通访问的服务器。
  2. 系统负载非常的高。
  3. SSH 不能登陆或者登陆比较慢。
  4. 服务器上提供的服务都不能正常响应,比如:不能访问系统上部署的 Web 服务器所提供的页面。
  5. 在系统上做任何其它操作都没有反应或者反应较慢。
  • 假死现象并不是经常出现

Linux 作为一个多任务操作系统,要把系统忙死,忙到 SSH 都连不上去也不是那么容易的。尤其是现在的系统还有 FD 保护、进程数保护、最大内存保护之类的机制。

你可以尝试 Fork 很多进程,系统会变得很慢,但是 SSH 通常还是能连上去的;你可以尝试分配很多内存,但是内存多到一定程度 Linux 的 OOM 机制的 Killer 进程就会杀掉你的进程,来保证其它服务能正常工作。

  • 假死现象是如何出现的

有一个确定可以把系统搞成假死的办法是:主进程分配固定内存,然后不停的 Fork,并且在子进程里面 Sleep(100)。

也就是说,当主进程不停 Fork 的时候,很快会把系统的物理内存用完。当物理内存不足时候,系统会开始使用 Swap。那么当 Swap 不足时会触发 OOM 机制的 Killer 进程来杀掉多余进程。

当 OOM 机制的 Killer 进程杀掉了子进程,主进程会立刻 Fork 新的子进程,并再次导致内存用完并再次触发 OOM 机制的 Killer 进程杀掉子进程,于是就进入死循环。而且 OOM Killer 进程是系统底层优先级很高的内核线程,此时也参与到这个死循环中,长此以往系统资源就会被消耗殆尽。

  • 系统出现假死现象后,为何还能 Ping 通但又无法建立新的网络连接

系统出现假死现象后,服务器还可以 Ping 通,但是无法建立新的网络连接。比如:SSH 无法连上去。这是由于 Ping 是在 Linux 系统底层 ( Kernel )处理的,并没有参与进程调度。而 SSHD 是要参与进程调度,但是优先级没 OOM 机制的 Killer 进程高。这样就会一直得不到系统调度,从而始终无法正确的提供服务来与 SSH 客户端建立新的连接。

  • Linux 出现假死现象,我们应该怎么办?

为什么要费那么大的力气把服务器搞死呢?我们知道假死是怎么产生的即可,这样可以针对假死的原因进行预防。 其实假死的情况很少发生,通常只有代码出现 Bug 很多的情况或者某个服务进程未正确配置的情况下才会出现。

建议使用 nice 命令将 SSHD 的进程优先级调高,这样当系统内存紧张时,还能勉强登陆服务器进行调试,然后分析故障。

来源:徐亮偉架构师之路 原文:http://t.cn/Eo8fJ6A 题图:来自谷歌图片搜索 版权:本文版权归原作者所有 投稿:欢迎投稿,投稿邮箱: editor@hi-linux.com

今日思想

The meaning of life is that it stops.

生命之所以有意义是因为它会停止。

—— 卡夫卡

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奇妙的Linux世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档