设为首页 - 加入收藏 天门站长网 (http://www.0728zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 互联 最佳 市场 转型
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

为什么说容器是单进程模型

发布时间:2019-09-25 05:51 所属栏目:[评测] 来源:阿娇
导读:Go 语言现在的一个主要应用领域就是云原生技术,包括容器(以 Docker 为代表)、Kubernetes、Prometheus 等。后面将写一系列文章来介绍一下云原生技术栈中的关键技术。 过去两年很多大公司的一个主要技术方向就是将应用上云,在这个过程中的一个典型错误用法

Go 语言现在的一个主要应用领域就是云原生技术,包括容器(以 Docker 为代表)、Kubernetes、Prometheus 等。后面将写一系列文章来介绍一下云原生技术栈中的关键技术。

过去两年很多大公司的一个主要技术方向就是将应用上云,在这个过程中的一个典型错误用法就是将容器当成虚拟机来使用,将一堆进程启动在一个容器内。但是容器和虚拟机对进程的管理能力是有着巨大差异的。不管在容器中还是虚拟机中都有一个一号进程,虚拟机中是 systemd 进程,容器中是 entrypoint 启动进程,然后所有的其他线程都是一号进程的子进程,或者子进程的子进程,递归下去。这里的主要差异就体现在 systemd 进程对僵尸进程回收的能力。如果你想和更多容器技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态。

为什么说容器是单进程模型

僵尸进程

说到僵尸进程,这里简单介绍一下 Linux 系统中的进程状态,我们可以通过 ps 或者 top 等命令查看系统中的进程,比如通过 ps aux 在我的 ecs 虚拟机上面得到如下的输出。

  1. [root@emr-header-1?~]#?ps?aux?
  2. USER???????PID?%CPU?%MEM????VSZ???RSS?TTY??????STAT?START???TIME?COMMAND?
  3. root?????????1??0.1??0.0?190992??3568??????????Ss???Mar16?289:04?/usr/lib/systemd/systemd?--switched-root?--system?--de?
  4. root?????????2??0.0??0.0??????0?????0??????????S????Mar16???0:05?[kthreadd]?
  5. root?????????3??0.0??0.0??????0?????0??????????S????Mar16??13:01?[ksoftirqd/0]?
  6. root?????????5??0.0??0.0??????0?????0??????????S
  7. root?????????7??0.0??0.0??????0?????0??????????S????Mar16??14:41?[migration/0]?
  8. root?????????8??0.0??0.0??????0?????0??????????S????Mar16???0:00?[rcu_bh]?
  9. root?????????9??0.0??0.0??????0?????0??????????S????Mar16?243:19?[rcu_sched]?
  10. root????????10??0.0??0.0??????0?????0??????????S????Mar16???0:50?[watchdog/0]?
  11. root????????11??0.0??0.0??????0?????0??????????S????Mar16???0:39?[watchdog/1]?
  12. root????????12??0.0??0.0??????0?????0??????????S????Mar16??23:51?[migration/1]?
  13. root????????13??0.0??0.0??????0?????0??????????S????Mar16??15:44?[ksoftirqd/1]?
  14. root????????15??0.0??0.0??????0?????0??????????S

我们可以看到排在第一位的就是前面说到的 1 号进程 systemd。其中的 STAT 那一列就是进程状态,这里的状态都是和 S 有关的,但是正常还有 R、D、Z 等状态。各个状态的含义简单描述如下:

  • S:Interruptible Sleep,中文可以叫做可中断的睡眠状态,表示进程因为等待某个资源或者事件就绪而被系统暂时挂起。当资源或者事件 Ready 的时候,进程轮转到 R 状态。
  • R:也就是 Running,有时候也可以指代 Runnable,表示进程正在运行或者等待运行。
  • Z:Zombie,也就是僵尸进程。我们知道每个进程都是会占用一定的资源的,比如 pid 等,如果进程结束,资源没有被回收就会变成僵尸进程。
  • D:Disk Sleep,也就是 Uninterruptible Sleep,不可中断的睡眠状态,一般是进程在等待 IO 等资源,并且不可中断。D 状态相信很多人在实践中第一次接触就是 ps 卡住。D 状态一般在 IO 等资源就绪之后就会轮转到 R 状态,如果进程处于 D 状态比较久,这个时候往往是 IO 出现问题,解决办法大部分情况是重启机器。
  • I:Idle,也就是空闲状态,不可中断的睡眠的内核线程。和 D 状态进程的主要区别是可能实际上不会造成负载升高。

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章