두 프로세스 간의 공유 메모리를 어떻게 알 수 있나요?

두 프로세스 간의 공유 메모리를 어떻게 알 수 있나요?

공유 메모리의 양을 알아야 합니다.~ 사이두 프로세스의 교차점, 즉 공유 메모리입니다.

어떤 아이디어가 있나요?

답변1

관심 있는 프로세스 ID를 보고 /proc/<pid>/maps, /proc/<pid>/smaps(또는 운영 체제가 지원하는 경우) 출력을 비교하여 공유 메모리 영역을 결정할 수 있습니다. pmap -x <pid>여기에는 shmget을 통해 호출되는 공유 메모리 세그먼트와 공유 라이브러리 및 파일이 포함됩니다.

편집: Spuratic 씨가 지적했듯이여기커널에 대한 자세한 내용이 있습니다.

ps를 사용하여 프로세스 RSS를 볼 수 있지만 모든 공유 페이지를 고려하지는 않습니다. 구체적인 프로세스는 RSS를 참조하세요. 아래를 참조하세요.

cv@thunder:~$ ps -o rss,pid,comm -p $$,7023
  RSS   PID COMMAND
22060  7023 xfwm4
 6876 18094 bash

smem도구는 공유 페이지를 고려하여 더 자세한 정보를 제공합니다. 위 프로세스를 이해하려면 아래 출력을 참조하세요.

cv@thunder:~$ smem -t |egrep "RSS|$$|7023"
  PID User     Command                         Swap      USS      PSS      RSS 
 9852 cv       grep -E RSS|18094|7023             0      340      367     2220 
18094 cv       bash                               0     3472     4043     6876 
 7023 cv       xfwm4 --display :0.0 --sm-c        0     5176     7027    22192 

에서 man smem:

   smem  reports  physical  memory usage, taking shared memory pages into account.  Unshared memory is reported as the USS (Unique Set Size).  Shared
   memory is divided evenly among the processes sharing that memory.  The unshared memory (USS) plus a  process's  proportion  of  shared  memory  is
   reported  as  the  PSS  (Proportional  Set  Size).   The USS and PSS only include physical memory usage.  They do not include memory that has been
   swapped out to disk.

관련 정보