본문 바로가기

Solaris/기술과 팁

솔라리스 SVM으로 swap 미러 구성 후, dumpadm을 이용, 크래쉬 덤프파일을 swap에 구성.


# df -h
파일시스템             크기   사용   가용   용량    설치지점
/dev/md/dsk/d10         20G   974M    19G     5%    /
/devices                 0K     0K     0K     0%    /devices
ctfs                     0K     0K     0K     0%    /system/contract
proc                     0K     0K     0K     0%    /proc
mnttab                   0K     0K     0K     0%    /etc/mnttab
swap                    20G   1.6M    20G     1%    /etc/svc/volatile
objfs                    0K     0K     0K     0%    /system/object
sharefs                  0K     0K     0K     0%    /etc/dfs/sharetab
/dev/md/dsk/d14         30G   3.6G    26G    13%    /usr
/platform/SUNW,Sun-Fire-T200/lib/libc_psr/libc_psr_hwcap1.so.1
                        20G   974M    19G     5%    /platform/sun4v/lib/libc_psr.so.1
/platform/SUNW,Sun-Fire-T200/lib/sparcv9/libc_psr/libc_psr_hwcap1.so.1
                        20G   974M    19G     5%    /platform/sun4v/lib/sparcv9/libc_psr.so.1
fd                       0K     0K     0K     0%    /dev/fd
/dev/md/dsk/d13         30G   1.2G    28G     5%    /var
swap                    20G   200K    20G     1%    /tmp
swap                    20G    56K    20G     1%    /var/run
/dev/md/dsk/d40        134G    13G   120G    10%    /home

# swap -l
swapfile             dev  swaplo 블록   사용 가능
/dev/md/dsk/d11     85,11     16 31464176 31464176

# dumpadm -d /dev/md/dsk/d11

swap 영역으로 지정된 미러디스크를 확인하고, 해당 디스크에 dumpadm 명령어로 크래쉬덤프 파일이 생성될 곳을 지정한다.


아래는 dumpadm 명령어의 상세 내용이다.
출처 : http://blog.naver.com/iloview012?Redirect=Log&logNo=40015261662
http://www.cyworld.com/NamJeonWoo_/2147283
http://blog.naver.com/imredviolet?Redirect=Log&logNo=10035505837


/etc/dumpadm.conf 파일이 있다.
/usr/sbin/dumpadm 이라는 명령어가 있다.
옵션을 모르겠으면
#man dumpadm
그러면 결과를 볼수 있는데..
act.0
unix.0
vmcore.0
파일이 생길것이다.
#more act.0

결과를 알 수있을것이다.

[출처] dumpadm|작성자 킹옵더월



(문제) dump 관리/core 파일 관리 정책에 대해 기술하여라.

  • (조건1)
  • Dump 관리 정책을 세우고 기술하여라.

 

 

시스템클래쉬 하드웨어 제조사, I/O문제, 소프트웨어 에러등에 기인한다. 만약 시스템 클래쉬가 발생한다면 콘솔에 에러메세지가 출력될것이다. 그리고 덤프 디바이스에 물리적인 메모리의 복사본을 저장할 것이다. 시스템은 자동적으로 리부팅이 될것이다. 시스템 부팅시에 savecore명령어가 실행되어서 덤프 디바이스로 부터 검색된 데이터를savecore디렉토리에 저장된 클래쉬 덤프를 쓰게된다. 저장된 클래쉬 덤프 파일은 문제를 해결할수 있는 정보를 담고있다.

 

●SystemCrash의 원인

   -바이스 드라이버의 문제

   -널 모듈 에러

   -H/W의 문제

   -Application문제

   -기타

 

-> 솔라리스 운영체제에서 시스템 클래쉬가 발생하면 메모리상의 커널 페이지 영역을 스왑파티션을 이용하여 디스크에 파일로 저장한다. 이파일의 분석을 통해 운영체제의 이상을 확인 하기 위해 사용될수있다.

  :/var/crash/hostname/unix.X (커널 )

  :/var/crash/hostname/vmcore.X(core kernel)

 

Θ시스템 클래쉬의 필요성

:메모리 누수 현상의 원인 파악



가정) 새로운 디스크가 추가되었다.(/dev/dsk/c0d1s0)

 

[JeonWoo@/var/core]# dumpadm
       덤프 컨텐트: 커널페이지
       덤프 장치: /dev/dsk/c0d0s1(스왑)
       Savecore 디렉토리: /var/crash/JeonWoo
       Savecore 사용: 예
[JeonWoo@/var/core]# dumpadm -d /dev/dsk/c0d1s0
       덤프 컨텐트: 커널페이지
       덤프 장치: /dev/dsk/c0d1s0(전용)        :dump device변경
       Savecore 디렉토리: /var/crash/JeonWoo

       Savecore 사용: 예

[JeonWoo@/var/core]# savecore -L
dumping to /dev/dsk/c0d1s0, offset 65536, content: kernel
100% done: 26474 pages dumped, compression ratio 2.62, dump succeeded
System dump time: Mon Apr 13 21:49:00 2009
Constructing namelist /var/crash/JeonWoo/unix.2
Constructing corefile /var/crash/JeonWoo/vmcore.2

100% done: 26474 of 26474 pages saved


[JeonWoo@/var/core]# cd /var/crash ; ls
JeonWoo/             :자신의 hostname으로 디렉토리가 생성된것을 확인
[JeonWoo@/var/crash]# cd JeonWoo ; ls
bounds     unix.0     unix.1     unix.2     vmcore.0   vmcore.1   vmcore.2

unix.2 : memory

vmcore.2 : 시스템 부팅시에 savecore명령어가 실행되어서 savecore디렉토리에 저장된 클래쉬 덤프를 쓰게된다.

 


 

주의)새로 추가되는 슬라이스는 기존의 메모리 보다는 더 커야한다. 메모리상의 모든 내용이 들어갈수있는 정도의 크기를 가지고있어야 하기 때문이다.

Θ dumpadm -d 옵션 다음으로는 반드시 block device파일을 지정해야한다.

Θ character device파일을 지정하게되면 에러가 발생하게된다.

 


● 메모리 전체 덤프 설정
[JeonWoo@/var/crash/JeonWoo]# dumpadm -c all
       덤프 컨텐트: 모두페이지
       덤프 장치: /dev/dsk/c0d1s0(전용)
       Savecore 디렉토리: /var/crash/JeonWoo

       Savecore 사용: 예


[JeonWoo@/var/crash/JeonWoo]# savecore -L
dumping to /dev/dsk/c0d1s0, offset 65536, content: all
100% done: 153487 pages dumped, compression ratio 2.26, dump succeeded
System dump time: Mon Apr 13 21:51:43 2009
Constructing namelist /var/crash/JeonWoo/unix.3
Constructing corefile /var/crash/JeonWoo/vmcore.3
100% done: 153487 of 153487 pages saved


[JeonWoo@/var/crash/JeonWoo]# ls
bounds     unix.1     unix.3     vmcore.1   vmcore.3
unix.0     unix.2     vmcore.0   vmcore.2

 


 #dumpadm -c (kernel | all)               : (-c : content)

#dumpadm -d /dev/dsk/c0d0s1       : (-d : dump device)

#dumpad -s  /var/crash/solaris      : (-s : savecore directory)

#dumpadm (-y | -n)                         : (-y : yes,  -n : no)

 


 

 

  • (조건2)
  • core 파일 관리 정책을 세우고 기술하여라

:운영체제에서 프로세스가 비 정상적으로 종료하게 되는 경우 메모리상의 프로세스 영역을 core 파일(이라는 이름으로 , 프로그램 실행위치에 저장되게 된다. 이 파일의 분석을 통해 프로그램 이상 원인을 밝히는데 사용될수있다.

 

Θ coreadm 서비스는 부팅시에 SMF 서비스에 의해서 svc:/system/coreadm:default  서비스/인스턴스이름을 가지고있다.

Θ core파일

:core파일은 프로그램이 실행된 디렉토리에 생성된다.

:core파일의 권한은 600이다.

:사용자 프로세스의 core 파일은 프로세스 소유자로 생성이된다.

:단, setuid, setgid 프로세스의 core 파일은  root 사용자 소유이다.(보안상 setuid,setgid는 disable로 설정하는것이좋다.) 

Θ 필요성

:보안상, core 파일 생성 사용자 확인 (추적)

:관리상, 시스템 불안전한 프로그램 점검(패치를 통해 해결)


 

[JeonWoo@/]# svcs -a | grep coreadm
online         16:23:33 svc:/system/coreadm:default


[JeonWoo@/]# coreadm
       전역 코어 파일 패턴: 

       전역 코어 파일 내용: default
       init 코어 파일 패턴: core
       init 코어 파일 내용: default
       전역 코어 덤프: disabled

      프로세스 당 코어 덤프: enabled
      전역 setid 코어 덤프: disabled
      프로세스 당 setid 코어 덤프: disabled
      전역 코어 덤프 기록: disabled


 

[JeonWoo@/]# coreadm -g /var/core/core.%u.%f%p.%t -e global
[JeonWoo@/]# coreadm
     전역 코어 파일 패턴: /var/core/core.%u.%f%p.%t       *전체경로지정
     전역 코어 파일 내용: default                                         
       init 코어 파일 패턴: core                                             *전체경로 지정, 기본파일이름지정
       init 코어 파일 내용: default
            전역 코어 덤프: enabled                                        *전역 코어 파일 활성화 지정
       프로세스 당 코어 덤프: enabled                                  *현재 디렉토리에 코어 파일 생성 활성화 지정
      전역 setid 코어 덤프: disabled                                     *setuid,setgid프로세스의 전역코어 파일 활성화 지정
 프로세스 당 setid 코어 덤프: disabled                               *setuid,setgid프로세스의 코어 파일 활성화 지정

     전역 코어 덤프 기록: disabled                                      *코어 덤프 로그 기록 유무 지정(/var/adm/messages)


[JeonWoo@/var/core]# mkdir /var/core                :경로지정에 따른 디렉토리 생성
[JeonWoo@/test]# sleep 800 &
[1]     1561
[JeonWoo@/test]# kill -8 1561
[JeonWoo@/test]# ls -l
총 3520
-rw-------   1 root     root        1.7M  4월 13일  22:25 core  :프로세스 소유자로 생성, permission이 600로 생성되어있다.
[JeonWoo@/test]# cd /var/core ; ls                     :전체경로가 지정된곳에 core파일 생성core.0.sleep1561.1239629117

        0 : UID, sleep : Program Name, 1320: PID. 1239629117 : 시간(초단위)






[JeonWoo@/]# coreadm
     전역 코어 파일 패턴: /var/core/core.%u.%f%p.%t
     전역 코어 파일 내용: default
       init 코어 파일 패턴: core
       init 코어 파일 내용: default
            전역 코어 덤프: enabled
       프로세스 당 코어 덤프: enabled
      전역 setid 코어 덤프: disabled
 프로세스 당 setid 코어 덤프: disabled
     전역 코어 덤프 기록: disabled
[JeonWoo@/]# coreadm -e log
[JeonWoo@/]# coreadm
     전역 코어 파일 패턴: /var/core/core.%u.%f%p.%t
     전역 코어 파일 내용: default
       init 코어 파일 패턴: core
       init 코어 파일 내용: default
            전역 코어 덤프: enabled
       프로세스 당 코어 덤프: enabled
      전역 setid 코어 덤프: disabled
 프로세스 당 setid 코어 덤프: disabled
     전역 코어 덤프 기록: enabled
[JeonWoo@/]# tail -f /var/adm/messages    :로그 모니터링

[JeonWoo@/test]# sleep 800 &
[1]     1600
[JeonWoo@/test]# kill -8 1600
[JeonWoo@/test]# ls -l
총 3520
-rw-------   1 root     root        1.7M  4월 13일  22:27 core   :프로세스 소유자로 생성, permission이 600로 생성되어있다.

*모니터링 결과*(#tail -f /var/adm/messages)

Apr 13 22:27:29 JeonWoo genunix: [ID 603404 kern.notice] NOTICE: core_log: sleep[1600] core dumped: /var/core/core.0.sleep1600.1239629249


[JeonWoo@/test]# cd /var/core ; ls
core.0.sleep1561.1239629117   core.0.sleep1600.1239629249  : 경로로 지정된디렉토리에 생성