![访问远程节点并获取内存使用情况的脚本](https://linux22.com/image/151053/%E8%AE%BF%E9%97%AE%E8%BF%9C%E7%A8%8B%E8%8A%82%E7%82%B9%E5%B9%B6%E8%8E%B7%E5%8F%96%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我正在使用 50 个计算节点的计算机集群上运行大型模拟。该求解器使用一种动态增长的数据结构,并且每个节点的数据结构(非常)不同。我需要确保使用的内存不会超出每个节点的内存限制。
到目前为止,我正在以最低效的方式进行操作:我为每个节点打开一个终端选项卡,然后运行top
以检查使用的内存百分比。
有没有办法用脚本来做到这一点?这个想法是在每个节点上 ssh 并存储内存使用情况,ssh 到下一个节点,等等......
答案1
如果您只是想终止一个变得太大的进程,那么ulimit
就是您的朋友。
从手册中:
-S use the `soft' resource limit
-H use the `hard' resource limit
-a all current limits are reported
-b the socket buffer size
-c the maximum size of core files created
-d the maximum size of a process's data segment
-e the maximum scheduling priority (`nice')
-f the maximum size of files written by the shell and its children
-i the maximum number of pending signals
-l the maximum size a process may lock into memory
-m the maximum resident set size
-n the maximum number of open file descriptors
-p the pipe buffer size
-q the maximum number of bytes in POSIX message queues
-r the maximum real-time scheduling priority
-s the maximum stack size
-t the maximum amount of cpu time in seconds
-u the maximum number of user processes
-v the size of virtual memory
-x the maximum number of file locks
-T the maximum number of threads
答案2
我需要确保使用的内存不会超出每个节点的内存限制。
--memfree
在 GNU Parallel 中使用有意义吗?如果系统没有 2 GB 可用空间,作业将不会启动。如果系统可用空间少于 1 GB,它将被终止。
parallel --slf hosts.txt --memfree 2G -j1 job ::: ar gu ments