目录
1. 查看内存情况
2. 查看磁盘情况
3. 查看文件或目录的磁盘空间使用情况
4. *典型场景
4.1. 前言
4.2. 场景
4.3. 原因
4.4. 措施
4.5. 参考
1. 查看内存情况
使用以下命令来查看系统内存大小:
> free -htotal used free shared buff/cache available
Mem: 15G 11G 244M 1.8G 3.6G 1.7G
Swap: 0B 0B 0B
这个命令的输出显示了系统的总内存(Total),已使用的内存(used)和可用的内存(available)。`-h`表示以人类可读的方式(即以K,M,G为单位)输出结果。
2. 查看磁盘情况
关于磁盘空间,您可以使用 `df` 命令来查看每个磁盘分区的空间使用情况:
> df -h
Filesystem Size Used Avail Use% Mounted on
none 2.0G 4.0K 2.0G 1% /mnt/wsl
none 233G 157G 76G 68% /usr/lib/wsl/drivers
/dev/sdb 1007G 20G 936G 3% /
none 2.0G 76K 2.0G 1% /mnt/wslg
none 2.0G 0 2.0G 0% /usr/lib/wsl/lib
rootfs 2.0G 2.1M 2.0G 1% /init
none 2.0G 0 2.0G 0% /dev
none 2.0G 0 2.0G 0% /run
none 2.0G 0 2.0G 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 2.0G 0 2.0G 0% /run/user
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
none 2.0G 76K 2.0G 1% /mnt/wslg/versions.txt
none 2.0G 76K 2.0G 1% /mnt/wslg/doc
drvfs 233G 157G 76G 68% /mnt/c
drvfs 122G 59G 63G 49% /mnt/d
drvfs 121G 84G 38G 70% /mnt/e
这个命令的输出显示了每个分区的总空间(size),已使用的空间(used)和可用的空间(avail)。`-h`同样表示以人类可读的方式输出结果。
3. 查看文件或目录的磁盘空间使用情况
# 查看当前目录的空间使用情况
> du -sh .
# 查看当前目录中所有子目录的空间使用情况
> du -sh *
-h
:以人类可读的格式(如 K, M, G)显示文件大小。-s
:只显示总计,而不显示每个子目录的大小。-d
:指定目录的深度。例如-d 0
只显示总计,-d 1
显示顶层目录和总计。
4. *典型场景
4.1. 前言
在使用Docker启动应用的场景中,有些应用,比如数据库等,在运行过程中(尤其是大量数据插入的情况下)需要足够的内存和磁盘。当你需要在宿主机上运行这样一个应用容器,需要使用上述命令查看内存、磁盘情况,并按需设置。
4.2. 场景
启动一个mongo应用容器,在运行大批量数据导入过程中,这个容器突然crash了,日志也没有明显的错误,是戛然而止。
4.3. 原因
日志没有显示明显的错误,而且突然中断,那很有可能是由于系统资源耗尽,比如内存不足导致的。容器启动后,在运行时(尤其是大量读写,例如上面提到的数据库等应用),内存会随着处理高峰而增长。但是宿主机的内存是有限的,在Linux系统中,当系统内存不足时,内核会触发一个叫做OOM Killer(Out of Memory Killer)的机制,自动结束一些进程来释放内存。这通常是最后的手段来防止系统完全无响应。你可以通过查看系统日志来确认这一点,最常用的命令是 dmesg
。运行 dmesg
命令后,查看输出信息中是否有OOM相关的信息。比如:
> dmesg | grep -i 'oom'
这个命令会搜索
dmesg
输出中所有包含"oom"(不区分大小写)的行,如果你看到像"Out of memory: Kill process 12345 (mongo)"这样的信息,那就说明是OOM Killer杀掉了你的进程。
4.4. 措施
在宿主机上使用Docker启动应用容器时,先使用上述的1/2章节命令,然后再设定容器的内存使用,如下:
# 在启动时设置容器的内存上限为3g
docker run --memory=3g --name ${your_app_name} ...
4.5. 参考
ChatGPT