$ cat mon-shm.sh
#!/bin/sh

# svmon -P $pid 으로 각 프로세서가 쓰고 있는 메모리를 추산한다.


# 이 값보다 큰 프로세스만 보여준다.
CNT_CHK=8
#echo "CNT_CHK:$CNT_CHK"

# input (file name )
INPUT_FILE_PATH="/home/cts/src/chk/process.lst"
TMP_FILE_PATH="/tmp/tmp-process-shm.lst"
DATE=`date '+%Y-%m-%d %H:%M:%S'`

grep  "^[a-zA-Z]" $INPUT_FILE_PATH > $TMP_FILE_PATH


echo "------------------------------------------------------------------------"
echo "$DATE 에 측정했습니다."
echo "------------------------------------------------------------------------"
echo ""
echo "Count 의 최대값은 11(또는 13)입니다."
echo "최대값에 가까워진 프로세스는 공유메모리 attach 수를 낮추어야 합니다 "
echo ""
echo "------------------------------------------------------------------------"
echo ""



while read line
do
        eval `echo $line|awk ' { printf(" process=%s;\n", $1) } '`
#       echo "process:$process"
        cnt=`ps -e|grep $process|grep -v grep|grep -v vi|wc -l`
        #echo "cnt:$cnt";
        if [ "$cnt" == "" ]
        then
                cnt=0
        fi

        if [ "$cnt" -eq 1 ]
        then
                pid=`ps -e|grep $process|awk '{printf $1}'`
        #       echo "pid:$pid"
                cnt_shm=`svmon -P $pid| grep -e "work shared memory segment" -e "work unused segment" |wc -l`
        fi
#exit;
       
        #echo "cnt_shm:$cnt_shm";
        if [ "$cnt_shm" == "" ]
        then
                cnt_shm=0
        fi
       
       
       
        if [ "$cnt_shm" -gt "$CNT_CHK" ]
        then
                echo "Pid:[$pid]\tPname:[$process]\tCount:[$cnt_shm]"
        fi
       
        #echo "-------------------------------"
done < $TMP_FILE_PATH


아래처럼 하면 한 프로세스가 attach 하고 있는 공유메모리를 알 수 있다.
#svmon -P $PID|grep -e "shared memory segment" -e "unused segment"

ipcs -mP 를 이용해서 Vsid(Virtual Segmentation ID) 를  찾아보면 공유메모리 키도 알아낼 수 있다.


1.  보통 컴파일 후 실행파일 편집
-bmaxData:0xD0000000/dsa 위처럼 컴파일 옵션을 넣어서 링크해 보았으나 실패.
아래처럼 보통 링크 후 편집했더니 잘 된다
/usr/ccs/bin/ldedit -bmaxdata:0xD00000000/dsa a.out
물론 위 문장을 makefile 안에 넣어서 쓰면 된다.

2. 아래는 데몬에 적용하기 힘들어서 안 쓰고 있다. putenv 등을 해보았는데 잘 안된다.
export LDR_CNTRL=MAXDATA=0@DSA 하면 공유메모리를 13 개까지 사용할 수 있다.


3.
EXTSHM=ON 위 옵션도 256Mb 이상 공유메모리가 하나라도 있으면 역시 실패


이상은 모두 32bit application 얘기다.