我的计算机上的某些进程正在使用过多的显卡内存来执行它们正在执行的任务。我想对这些任务施加限制,让操作系统限制这些任务对卡上 RAM 的使用。ulimit
通常,如果目标是文件系统、CPU 或系统内存,我就可以使用。然而,该实用程序似乎没有任何有关 PC 内视频卡内存的功能。
那么这就是我的问题:假设我知道一个可执行文件的路径,我想对其施加显卡内存消耗的上限,那么如何施加这样的限制呢?本例中的卡是基于 NVidia 的。
我的计算机上的某些进程正在使用过多的显卡内存来执行它们正在执行的任务。我想对这些任务施加限制,让操作系统限制这些任务对卡上 RAM 的使用。ulimit
通常,如果目标是文件系统、CPU 或系统内存,我就可以使用。然而,该实用程序似乎没有任何有关 PC 内视频卡内存的功能。
那么这就是我的问题:假设我知道一个可执行文件的路径,我想对其施加显卡内存消耗的上限,那么如何施加这样的限制呢?本例中的卡是基于 NVidia 的。
uptime
管道sed
修复了第一部分,但内存使用情况如何?top
至少在默认情况下以交互方式运行。
所以:我需要观察使用过的 RAM,不包括机会缓存(一旦需要内存就会被丢弃)。并询问两者,因为我希望一个标准工具可以做到这一点,而不是两个。或者 - 甚至更好 -/proc
指示 RAM 部分的东西。
Firefox 105.0.1 吃掉了我所有的内存(mate-system-monitor 报告 100%),经常使 Linux Mint 20 (ulyan) 崩溃,通常每周几次。
我的系统完全锁定,鼠标和键盘变得无响应,点击<ctrl>+<alt>+<F5>
不起作用。
Mint 肯定有过错:操作系统必须与写得不好、耗尽内存的软件隔离开来。
Mint / Firefox 的早期版本没有遇到这个问题。
可以做什么?
更新:升级到 Linux Mint 20.3 并没有解决。
两种语言的例程都很便宜:goroutine 每个 2KB,而 Elixir 进程每个 0.5KB。
我知道在BEAM中启动一个进程需要 0.5KB 的内存。这在Elixir和 Erlang的情况下是如此轻量级,而在Go的情况下在较小程度上似乎是使用这些运行时的优势,与其他依赖于它们自己的不那么便宜的进程和线程或依赖的语言相比底层 OS的进程和线程(据说也需要更多内存)。
我想知道在基于 Linux 的系统上启动进程需要多少内存。我知道内存使用情况取决于进程在做什么。但我假设只是启动一个什么都不做的进程会产生内存成本)。那费用是多少?
我在哪里可以阅读更多关于它的信息?有没有我可以检查的文件/命令?
我想在我的实验中运行大约 200 个进程。他们每个人真的需要不到一个 GB:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24688 rinkman 20 0 6082416 335536 15680 S 116.9 0.3 77:32.92 java
25314 rinkman 20 0 6614936 379040 15700 S 116.6 0.4 73:43.02 java
25780 rinkman 20 0 6082408 348140 15664 S 116.6 0.4 72:12.34 java
25994 rinkman 20 0 6082408 350592 15656 S 114.6 0.4 71:42.34 java
30472 rinkman 20 0 6749092 441492 15664 S 108.6 0.4 64:54.38 java
27052 rinkman 20 0 6548364 403040 15692 S 106.3 0.4 66:38.30 java
29314 rinkman 20 0 6022012 393656 15660 S 105.0 0.4 65:57.09 java
28173 rinkman 20 0 6681492 427816 15660 S 104.3 0.4 66:17.47 java
我可以访问 6 个节点,每个节点都有100 GB的 RAM。因此,如果他们只占用GB,则没有问题。但是,正如您在上面看到的,每个都需要超过6 GB。
当我查看以下输出时,我感到非常惊讶free -m
:
total used free shared buff/cache available
Mem: 96481 15396 326 75 80758 80448
Swap: 16383 2336 14047
它显示仅使用了15.4 GB。这让我想到,进程可以共享未使用的内存吗?80.4 GB真的可用吗?不幸的是,我无法谷歌搜索有趣的信息。我只是偶然发现了有关多处理/线程与数据交换、通用缓存等的文章。拜托,你能帮我解释一下这个问题吗?
PS如果这是不可能的,有什么办法可以减少这些进程的分配内存(我只从200个运行了8个)?问题在于 bash 脚本仅为java提供了2 GB(这是其中的一部分):
java -Xms64m -Xmx2048m -Djava.library.path="$BEAST_LIB:/usr/local/lib:$LD_LIBRARY_PATH" -cp "$BEAST_LIB/beast.jar:$BEAST_LIB/beast-beagle.jar" dr.app.beast.BeastMain $*
所以我无法理解为什么它总是需要多4-5 GB。我对其他 Java 程序也有同样的现象,例如BEAST 2或treeannotator。
vmalloc(size)
分配一个size
实际上是连续的 long 内存,但物理映射不会是连续的。这是否意味着虚拟分配的size
长内存实际上位于物理内存的不同页框中?
[58306.633900] {1}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 1
[58306.633905] {1}[Hardware Error]: It has been corrected by h/w and requires no further action
[58306.633907] {1}[Hardware Error]: event severity: corrected
[58306.633909] {1}[Hardware Error]: Error 0, type: corrected
[58306.633911] {1}[Hardware Error]: fru_text: CorrectedErr
[58306.633912] {1}[Hardware Error]: section_type: memory error
[58306.633914] {1}[Hardware Error]: node: 0 device: 44696
[58306.633916] {1}[Hardware Error]: error_type: 2, single-bit ECC
这已经出现在我的带有ECC RAM的 Debian Xeon 服务器上,这是否意味着 RAM 模块正在死亡或其他类似由 SW 引起的错误?我看到其他一些帖子声称他的操作系统重新启动,而我的没有,这就是我问的原因。谢谢你。
我刚刚尝试调整该badblocks
实用程序以使用更多 RAM 并可能实现更高的性能。
我正在运行的确切命令是(没有 HDD 的 S/N):
badblocks -v -b 4096 -c 98304 -w -s /dev/disk/by-id/ata-WDC_WD5000LPCX-24C6HT0_SN >> /root/spare-hdd-badblocks.log 2>&1 &
但是,我不badblocks
经常使用该工具,所以如果我可能会问...-c
开关究竟做了什么,为什么建议实现更高的速度?它真的会吃更多的内存吗?如果是这样,因为我有很多,进一步增加它可能是明智的吗?
从它的手册页:
-c
:块数是一次测试的块数。默认值为 64。
我不明白,我只是希望有人明白。
信用、数学和更多有价值信息的来源:
http://www.pantz.org/software/badblocks/badblocksusage.html
我的系统: Debian 11 在具有 32GB ECC RAM 的无头 Xeon 服务器上。