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에서 사용하는 것이 합리적입니까? 시스템에 2GB의 여유 공간이 없으면 작업이 시작되지 않습니다. 시스템 여유 공간이 1GB 미만인 경우 시스템이 종료됩니다.
parallel --slf hosts.txt --memfree 2G -j1 job ::: ar gu ments