简介
客户交流中被问到的两个问题
1.在docker中运行top命令能否看到宿主机的内存CPU信息?
2.op能看到容器外面宿主机的进程吗?
提问:在docker中运行top命令能否看到宿主机的内存CPU信息?
回答这个问题之前我们首先想以下linux系统中的/proc目录是干什么的
/proc是个伪文件系统,存在于内存之中而不是硬盘上。通过它可以和内核内部数据结构进行交互,获取 有关进程的有用信息。
/proc中会有以下文件:
- /proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)
- /proc/meminfo - 物理内存、交换空间等的信息
- /proc/mounts - 已加载的文件系统的列表
- /proc/devices - 可用设备的列表
- /proc/filesystems - 被支持的文件系统
- /proc/modules - 已加载的模块
- /proc/version - 内核版本
- /proc/cmdline - 系统启动时输入的内核命令行参数
- /proc/{pid} - 进程信息
top正是通过/proc来获取当前内存、CPU信息的。dock er启动的容器共享操作系统内核,在容器启动的时候会挂载部分/proc里面的文件,能否通过top在docker中看到内存和CPU信息,主要看有没有挂载这些文件。
那么问题又来了,需要手动挂载这些文件吗?一般来说不需要,挂载内容的多少一般和镜像有关。一般的redhat/ubuntu镜像都是会挂载内存CPU信息的,精简的dokcer镜像信息会少些,有时top得到的信息不全面。
另外一个问题,top能看到容器外面宿主机的进程吗?
经过上面分析top看到信息的多少取决于/proc里面内容,由于pid 命名空间的隔离,宿主机的pid信息不会被启动容器挂载,所以看不到容器外宿主机进程。
- free -m命令原理和top类似