我需要编写一个脚本来查找多个 Linux 服务器(2000+)的总内存和总交换空间。我有一台受信任的服务器,无需密码即可登录所有这 2000 台服务器。
当我运行这个脚本时,它应该给出如下输出:
Server total memory swap
redhat1
redhat2
redhat3
...
redhat2000
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这个目标?
经过一个小时的谷歌搜索,我仍然找不到 Linux 内存子系统开发人员的联系电子邮件。
问题:显示谁开发 Linux 内核的网页在哪里,特别是内存“子系统”部分?
假设我cat有一个大小为 10 GB 的文件,并且我通过管道将其传输到head,cat如果我的系统只有 2 GB 的 RAM 和 1 GB 的交换空间,它会工作吗?我想知道内部细节。
我想编写一个批处理脚本来检查已用或可用内存,以便在可用内存小于 X mb 时运行命令。
我用谷歌搜索,但他们引用的页面对我不起作用我正在使用 centos 7
基本上我想做
if availablememory < 26000m
do command=forever stopall
do command=pkill -f checkurl.php
end
BEFORE PROGRAM START
[root@www ~]# free -m
total used free shared buff/cache available
Mem: 32002 3471 802 1121 27728 26529
Swap: 38112 234 37878
[root@www ~]#
AFTER PROGRAM START
[root@www ~]# free -m
total used free shared buff/cache available
Mem: 32002 13913 200 1121 17887 16381
Swap: 38112 234 37878
Run Code Online (Sandbox Code Playgroud) 我们有一台 32G 的 Linux 机器。我们按如下方式捕获内存:
mem=` cat /proc/meminfo | grep MemTotal | awk '{print $2}' `
echo $mem
32767184
Run Code Online (Sandbox Code Playgroud)
现在我们将其转换为 GIGA:
mem_in_giga=` echo $(( $mem / 1024 / 1024)) `
echo $mem_in_giga
31
Run Code Online (Sandbox Code Playgroud)
但从结果中我们得到 31 而不是 32G。
与free命令相同的故事:
free -g
total used free shared buff/cache available
Mem: 31 9 17 0 4 20
Swap: 7 0 7
Run Code Online (Sandbox Code Playgroud)
那么我们如何从任何命令中获得“32G”呢?
$ systemctl status machine.slice\n\xe2\x97\x8f machine.slice - Virtual Machine and Container Slice\n Loaded: loaded (/usr/lib/systemd/system/machine.slice; static; vendor preset: disabled)\n Active: active since Wed 2018-06-13 08:45:07 BST; 1 day 15h ago\n Docs: man:systemd.special(7)\n Tasks: 0\n Memory: 717.0M\n CGroup: /machine.slice\n\n$ cd /sys/fs/cgroup/memory/machine.slice\n$ cat memory.usage_in_bytes \n751915008\n$ cat tasks\n$ cat cgroup.procs\n$\nRun Code Online (Sandbox Code Playgroud)\n\nmachine.slice即使 cgroup 中没有进程/线程,但仍使用 717MB,这意味着什么?这是内核错误吗?
我可以通过使用 virt-manager 启动虚拟机然后停止它来重现这一点。如果我重复这个循环,结果大致相同 - 即系统似乎没有泄漏这数百兆字节。
\n\n$ uname -r\n4.16.14-300.fc28.x86_64\n\n$ rpm -q systemd libvirt-daemon\nsystemd-238-8.git0e0aa59.fc28.x86_64\nlibvirt-daemon-4.1.0-2.fc28.x86_64\nRun Code Online (Sandbox Code Playgroud)\n 我遇到了这个问题:
并基于答案和对答案的评论:
内核内存映射包括所有物理内存的直接映射,因此内存中的所有内容都出现在那里;它还包括内核、模块等的单独映射,因此包含内核的物理地址至少出现在两个不同的映射中
这是真的?我找不到任何来源或参考资料,为什么它会包含整个物理内存的映射,然后又具有内核模块的单独映射?那不是多余的吗?
有人可以简单地解释一下 64 位 Linux 进程的虚拟内存的内核部分是什么吗?并请提供答案的来源!因为我在任何书籍或论文中都找不到与此相关的任何内容。
我正在使用 GNOME 3.38 X11 运行 Arch Linux,并且有一个问题,即我处于空闲状态(在使用计算机一段时间并关闭所有内容后)使用大约 8-9GB 的 RAM。
我知道linxatemyram,我认为这不是问题,因为free -m打印了以下内容:
total used free shared buff/cache available
Mem: 62282 9059 29502 162 23720 52368
Swap: 8191 0 8191
Run Code Online (Sandbox Code Playgroud)
表明我确实在什么都不运行时使用了大量内存。当我曾经拥有 16GB 时,由于这个问题,我也会经常耗尽内存,所以我认为这不是某种形式的缓存,因为当我的内存使用量增加时,它会回落。
奇怪的是,top内存使用量也没有达到它声称保留的数量。这是我得到的结果的粘贴。我一直在想一定有什么东西在泄漏,但我似乎无法找出是什么。
编辑:额外的输出。这些是在重新启动后不久测量的,因此不具有代表性。出现同样的情况后,我会重新运行并发布。
$ mount | grep tmpfs
dev on /dev type devtmpfs (rw,nosuid,relatime,size=31848276k,nr_inodes=7962069,mode=755,inode64)
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755,inode64)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,size=4096k,nr_inodes=1024,mode=755,inode64)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,size=31888716k,nr_inodes=409600,inode64)
tmpfs on /run/user/1000 …Run Code Online (Sandbox Code Playgroud) 内存不足是一个常见问题,官方的 OOM 效率不高。为了更快地完成查杀工作,还引入了其他几个程序。
我想知道为什么没有办法创建交换而不是杀死。考虑一个没有交换的系统,OOM 程序可以触发sudo swapon /swapfile(假设swapfile存在)而不是杀死进程。
实施这个想法有技术限制吗?
我想限制 CentOS 中 PHP-FPM 和 Nginx 进程的 CPU 和内存使用量。我遇到了以下工具
哪个更有效,我如何配置以限制 PHP-FPM 和 Nginx 进程的资源?