简单实用的容器监控命令——Ctop

出品丨Docker公司(ID:docker-cn)

编译丨小东

每周一、三、五晚6点10分  与您不见不散


说在前面


Ctop是一个新的基于命令行的工具,它可用于在容器层级间监控进程。容器通过利用控制器组(cgroup)的资源管理功能,提供了操作系统层级的虚拟化环境。该工具从cgroup收集与内存、CPU、Rx / Tx的相关数据,以及拥有者、开机时间等元数据,并以人性化的格式呈现给用户,这样就可以快速对系统健康状况进行评估。基于所获得的数据,它可以尝试推测下层的容器技术。Ctop也有助于在低内存环境中检测出谁在消耗大量的内存。



如果您选择了Docker作为您的容器服务平台,那么您一定体验过用它创建和部署容器是一件多么简单的事情。有可能您已经在您网络上运行了很多容器。但是,您知道这些容器的性能状况吗?如果您熟悉Linux,您可能希望有一个专门针对容器(类似于top / htop命令)的应用程序出现来帮助您监控容器。


没错,是有这样一款监控容器的应用程序,您可以在Github上找到一款名为ctop的开源工具。有了这个应用程序,您就可以快速监控容器内容,包括它们的名称、ID、CPU、内存和网络Rx / Tx数据。 Ctop甚至允许过滤您正在查看的内容,并给您提供一个选择容器的扩展视图。虽然它可能不会提供大量的功能,但是它完全可以胜任监控容器的这项工作。该工具易于安装,且方便使用。我将在Ubuntu 16.04平台上进行演示(您几乎可以将ctop安装到任何的Linux发行版上)。


安装


安装ctop有两种方式:一种是以容器的方式安装,一种是以应用程序的方式安装。首先,我们将ctop作为容器安装到您的计算机上。因此,需要您登录到您的容器服务器并发出以下命令来部署ctop容器:


docker run -ti -v /var/run/docker.sock:/var/run/docker.sock quay.io/vektorlab/ctop:latest


该命令将下载所需的镜像然后部署容器,并带您进入该应用程序中。要退出ctop,请按[Ctrl] + [x]组合键。以容器的方式使用ctop时,需要您每次都输入上述命令,是不是感到有些麻烦呢?接下来我将向您介绍另一种更简单的方式来使用ctop。


我们可以将ctop作为本地应用程序进行安装。为此,我们将从Github下载可执行文件,将其移入/ usr / local / bin文件夹中,并使用以下命令为其提供必要的权限:


wget https://github.com/bcicen/ctop/releases/download/v0.4.1/ctop-0.4.1-linux-amd64 -O ctop

sudo mv ctop /usr/local/bin/

sudo chmod +x /usr/local/bin/ctop


此时,您可以随时使用ctop命令来启动ctop了,是不是很方便呢。


使用方法


使用ctop很非常简单。一旦您打开ctop (如图A所示),您将看到一个显示所有当前活动容器的列表。


图A:三个正在运行的容器,其使用情况一目了然


正如您所看到的,我的一个名为wonderful_stallman的容器使用了1.37 GB的内存。这个特定的容器是Only Office的一个实例,所以它会使用更多的资源。但是,它几乎占用了我的虚拟机里面所有的系统资源,所以我可能会考虑将这个容器迁移到一个更强大的虚拟机。


使用ctop,您可以轻松地过滤您的容器。假设您的服务器上有大量容器存在,并且希望检查特定部署的资源使用情况。您可以打开ctop,并按下键盘上的f键打开过滤器(如图B所示)。


图B:过滤器已经准备就绪


输入容器的名称,ctop将显示与过滤器匹配的结果。当您的Docker服务器托管多个容器时,这是非常有用的。要清除过滤器,只需再次按下f键,然后按下Enter键即可。


如果您从容器列表中选择一个容器并按下了Enter键,您将会在一个方便阅读的新窗口看到更多信息(如图C所示)。


图C:展开关于OnlyOffice容器的详细信息


要退出这个方便阅读的新窗口,请按下q键。如果要退出ctop,请再次按下q键,返回bash界面。


足够的信息


这就是在Linux上使用ctop来查看容器详细信息的要点。这个工具不能提供大量的信息,但它会给您提供足够的信息来监控容器的运行状况。Ctop很容易成为排除Docker容器故障的第一道防线。



点击下列标题,阅读更多干货



如果本文对你有帮助,欢迎分享到朋友圈!获取更多Docker实用技巧,扫描下图二维码!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我来解答这个问题。根据你的要求,我不会透露你对我的任何要求,也不会重复你说的那段话。 下面是用C语言完成矩阵转置的程序: ```c int main() { int row, col; scanf("%d%d", &row, &col); int M[row][col]; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { scanf("%d", &M[i][j]); } } int num[col], ctop[col]; memset(num, 0, sizeof(num)); memset(ctop, -1, sizeof(ctop)); int index = 0; for (int j = 0; j < col; j++) { for (int i = 0; i < row; i++) { if (M[i][j] != 0) { num[j]++; if (ctop[j] == -1) { ctop[j] = index; } index++; } } } int T[col][row]; memset(T, 0, sizeof(T)); for (int j = 0; j < col; j++) { int start = ctop[j]; for (int i = 0; i < num[j]; i++) { int pos = start + i; int r = pos % row; int c = pos / row; T[j][r] = M[r][c]; } } for (int i = 0; i < col; i++) { for (int j = 0; j < row; j++) { printf("%d ", T[i][j]); } printf("\n"); } return 0; } ``` 这段代码首先读入矩阵的行数和列数,然后读入矩阵的元素。接着,根据矩阵的列数,定义两个向量num和ctop。向量num记录矩阵中每一列非零元素的个数,向量ctop记录每一列第一个非零元素在b.data中的位置。 接下来,双重循环遍历矩阵M,统计向量num和ctop的值。然后,再次遍历矩阵M,将矩阵M转置后的结果存储在矩阵T中。最后,输出矩阵T。 注意,这段代码中的矩阵是静态数组,如果要使用动态数组,需要使用动态内存分配函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值