반응형
  1. prstat -s rss

    '-s' sorts prstat output by rss column (see man page for other columns). Also try '-a' option for a per user accumulation.

  2. ps -eo pid,pmem,vsz,rss,comm | sort -rnk2 | head

    Top 10 RAM consumers. '-o pmem' displays percentage of resident memory i.e. RAM used by process.

  3. ls -lh /proc/{pid}/as

    Easy way to show total address space (vsz) of a process. Useful in combination with pgrep to accumulate by user, pattern, ... e.g.:

    for pid in `pgrep -U webserver`; do ls -lh /proc/$pid/as; done


반응형
반응형

출처 : http://moonsungju.tistory.com/32



-----------------------------------------------------------------------------------------------

SUN Studio 12 버전 별로 정리해보았습니다. 다들 알고 있으시겠죠?? 모르시는 분들을 위해~ㅋㅋㅋㅋ

Solaris 10u10 기준이며, OS release 따라 약간 다를 수도 있습니다. 이 부분은 다들 알고 계시기 때문에 PASS~

해당 설치 방법은 제가 전에 On-site 때 실행했던 방법이며, 혹시 다른 방법으로 설치하시는 분이 있다면 그 방법으로 하시면 됩니다참고만 하시면 될 듯 싶네요.

 

1.     현재까지 나온 Sun Studio 12

l  SunStudio 12

l  SunStudio 12.1

l  SunStudio 12.2

l  SunStudio 12.3

 

2.     압축 풀기

bzcat download_directory/[File Name]-[OS]-[PLATFORM]-[FORMAT]-ML.tar.bz2 | /bin/tar -xf -

ex) bzcat SolarisStudio12.3-solaris-sparc-pkg.tar.bz2| /bin/tar -xf -

 

3.     설치/삭제 옵션

SunStudio Version

NON-GUI 실행 옵션

SunStudio 12

설치) nodisplay

삭제) java -cp . uninstall_Sun_Studio_12 nodisplay

     uninstaller

SunStudio 12.1

설치) --non-interactive-accept-license --create-symlinks --tempdir /tmp

삭제) uninstall.sh --non-interactive (삭제 시 설치 디렉토리도 삭제하면 좋겠죠?)

SunStudio 12.2

설치) --non-interactive --create-symlinks --tempdir /tmp

삭제) uninstall.sh --non-interactive (삭제 시 설치 디렉토리도 삭제하면 좋겠죠?)

SunStudio 12.3

 

4.     C로 컴파일 예제

#include <stdio.h>

int main(){

printf("Moonsungju, world!\n");

return 0;

}

컴파일링 하는 방법은 다들 아시죠? cc를 통해 진행하시면 됩니다굳이 여기까지 테스트는 안 하셔도 되나 그래도 심심풀이로 하시고 싶으신 분~~~ 각자의 소스코드로 진행하시면 됩니다. 위에 코드는 가장 많이 테스트 하시는 hello.c 코드 입니다. 그냥 moonsungju로 바꾼 것 외에 다른 수정사항은 없습니다.(gcc도 동일)







1.패치실행

2.스튜디오실행




output-device=virtual-console

input-device=virtual-console


eeprom "output-device=screen"

eeprom "input-device=keyboard"



/usr/dt/bin/dtlogin start


/usr/dt/bin/dtconfig -e

반응형
반응형



출처 : http://sksstar.tistory.com/42





○ 마운트의 정의
파일시스템 구조 내에 있는 일련의 파일들을 사용자나 사용자 그룹들이 이용할 수 있도록 만드는 것
논리적으로 디스크와 디렉토리를 붙이는 것. (로컬 자원, 원격 자원 모두 마운트 가능)
시스템이나 사용자가 사용하지 않는 자원은 언마운트.



● /usr/sbin/mount
현재 마운트된 파일시스템 목록 표시
파일시스템을 마운팅할 때 사용
/etc/mnttab에 마운트포인트 추가
/etc/vfstab에 설정하면 시스템이 부팅시에 파일시스템 마운트. (리눅스는 /etc/fstab)

mount {-F fstype} {-o options} device_name mount_point

-F : 파일시스템 지정
-o : 옵션 사용시 지정

○ 옵션 종류

default option other options
-F ufs hsfs, pcfs, nfs
-o read/write ro
-o setuid nosetuid
-o logging nologging
-o largefiles nolargefiles
-o onerror=panic lock, umount




● /usr/sbin/mountall
시스템 부팅시에 /etc/vfstab 파일 read
mountall 명령 실행 시 /etc/vfstab 파일을 읽고 마운트 안되어 있는 것들을 모조리 마운트 시킴.

mountall {option}




● /usr/sbin/umount
파일시스템의 마운트 포인트를 제거
/etc/mnttab에 entry 삭제
/etc/mnttab에서 마운트 포인트를 참조하여 제거

umount {-f} [mount_point | device_name]

-f : 강제적으로 파일시스템 언마운트



● /usr/sbin/umountall
시스템 shutdown시에 /etc/mnttab 파일 read
umountall 명령 실행 시 /etc/mnttab 파일을 읽고 마운트 되어 있는 것들을 모조리 언마운트 시킴.
(단, vfstab에서 정의된 /, /usr, /proc, /dev/fd, /var, /var/run, /tmp는 제외)

umountall {option}

-r : remote 파일시스템만 언마운트



상식적으로 파일시스템이 사용 중일때는 unmount할 수 없다. 이 경우 "umount : file_system_name busy"라는 에러가 출력된다.
하지만, 파일시스템이 사용중일 때 unmount 해주는 명령어가 있다.


● fuser
파일시스템을 사용하고 있는 프로세스 표시 및 필요시 kill

# fuser -cu mount_point // 파일시스템 이름과 사용자 정보 표시
# fuser -ck mount_point // 파일시스템에 접근한 모든 프로세스 kill
# fuser -c mount_point
# fuser -fuk filename | directory
# umount mount_point


또는 위에서 보았던 umount -f 옵션을 주면 강제로 파일시스템을 unmount 한다.



■ /etc/mnttab
현재 마운트된 파일시스템 관리
마운트시 /etc/mnttab 파일에 entry 추가
언마운트시 /etc/mnttab 파일에서 entry 삭제
ASCII 파일이지만 관리자가 직접 관리할 수 없다. 커널이 직접 관리함.



■ /etc/vfstab
Virtual File System Table
부팅시에 자동으로 마운트 할 모든 파일시스템 저장
/etc/vfstab에 맵핑된 마운트 포인트는 관리자가 수동 마운트시에 사용할 수도 있다.



■ /etc/default/fs 와 /etc/dfs/fstypes

○ 마운트 명령 실행시 참조

mount {-F ufs} /dev/dsk/c0t0d0s7 /export/home
mount {-F nfs} unix200:/export/home /export/home

첫번째는 /etc/default/fs 파일 참조
두번째는 /etc/dfs/fstypes 파일 참조

○ /etc/default/fs
Default Local file system
위 파일의 내용 중 LOCAL=ufs 줄이 기본값 지정 부분임.

○ /etc/dfs/fstypes
Default Remote file system
위 파일의 내용 중 nfs NFS Utilities 부분이 기본값 지정 부분임.

○ 파일시스템 타입 찾기

# grep /export/home /etc/vfstab




■ /var/run
솔라리스8에서 추가된 tmpfs type의 파일시스템
보안적인 이유로 소유자는 루트.
쉽게 말해서 임시 디렉토리라고 생각하면 된다.
루트는 /var/run을 사용하고, 일반 사용자는 /tmp를 사용함.

반응형
반응형

작성자 : 박상수
작성일자 : 2010.12.03
작업환경 : VMware7 [ Solaris 9 ]
참고자료 : 서진수 샘




출처 : http://estenpark.tistory.com/266



굉장한 꿀자료... 감사합니다.



1. Slice(parttion) 개요

- Cylinder의 그룹
- 0~7번 Slices로 구성
- Slice 2는 전체 Disk를 표현(수정불가)
* Cylinder의 총개수
- Benefit
* Data의 조직화
* File Access 속도 감소
* I/O performance 향상

2. Disk Slice Naming Convention



3. 리부팅 하지 않고 Hard 추가 방법

[설명] Solaris에서 인식한 하드 확인
[root@calmmass:/]
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0d0 <DEFAULT cyl 44381 alt 2 hd 15 sec 63>
/pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
Specify disk (enter its number): ^D

[설명] 하드디스크 추가 합니다. VMware에서 하드를 2기가 추가하도록 하겠습니다. 아래 그림과 같이 수행 하시면 됩니다.

[설명] 명령어를 이용하여 장치를 인식하게 합니다. 보통의 경우 아래와 같이 명령어를 사용하여 인식하게 하는 방법을 많이 쓴다고 합니다. 재부팅 하게 되면 DB 서버나 WAS 서버를 모두 종료 후 내려야 하기 때문입니다.
[root@calmmass:/]
# devfsadm

[설명] 원래는 0번 하드디스크만 있었지만 devfsadm 명령어를 수행하면 1번 하드디스크를 인식 시킬 수 있습니다.
추가한 디스크를 선택 합니다.(1)
[root@calmmass:/]
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0d0 <DEFAULT cyl 44381 alt 2 hd 15 sec 63>
/pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
1. c2t0d0 <DEFAULT cyl 1021 alt 2 hd 128 sec 32>
/pci@0,0/pci15ad,1976@10/sd@0,0
Specify disk (enter its number): 1
[설명] Disk Slice name을 반드시 기억 하시기 바랍니다. /dev/dsk/ 디렉토리에 파일이 생성 됩니다.
selecting c2t0d0
.. 생략 ..

[설명] fdisk를 생성하지 않고 parttion을 하게 되면 에러가 발생 됩니다. 반드시 fdisk를 수행 후 parttion을 하시기 바랍니다.
format> fdisk
No fdisk table exists. The default partition for the disk is:
a 100% "SOLARIS System" partition
Type "y" to accept the default partition, otherwise type "n" to edit the
partition table.
y

[설명] part는 parttion의 약어로 사용 가능합니다.
format> part
.. 생략 ..

[설명] 0번 Slice를 선택 합니다.
partition> 0
[설명] 이부분은 파티션 id를 의미하며 가급적이면 설정 하지 마세요. Enter
Enter partition id tag[unassigned]:
[설명] wm(read/write mount), wu(read/write unmount), rm(read/only mount), ru(read/only unmount) 네 가지 종류가 있으며 기본적으로 설정되는 wm을 선택 하겠습니다. Enter
Enter partition permission flags[wm]:
[설명] 실린더의 번호를 넣습니다. 처음 시작하면 0부터 시작 하기때문에 Enter
Enter new starting cyl[0]:
[설명] 용량을 mb단위로 적습니다.
Enter partition size[0b, 0c, 0e, 0.00mb, 0.00gb]: 200mb
[설명] 파티셔닝을 한 내역을 보겠습니다.
partition> print
Part Tag Flag Cylinders Size Blocks
0 unassigned wm 0 - 99 200.00MB (100/0/0) 409600
.. 생략 ..

[설명] 1번 Slice를 선택 하고 위와 동일합니다.
partition> 1
Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
[설명] 굉장히 중요한 부분입니다. 이것은 Cylinders의 이전 번호 마지막 번호가 99라면 100을 설정 합니다.
Enter new starting cyl[0]: 100
Enter partition size[0b, 0c, 100e, 0.00mb, 0.00gb]: 300mb
partition> print
Part Tag Flag Cylinders Size Blocks
1 unassigned wm 100 - 249 300.00MB (150/0/0) 614400
.. 생략 ..

[설명] 3번 Slice를 선택 하고 위와 동일합니다.
여기에서 2번 Slice를 선택 하지 않은 이유는 기본적으로 backup tag가 사용하고 있으며 변경 해서는 안됩니다.
partition> 3
Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
Enter new starting cyl[0]: 250
Enter partition size[0b, 0c, 250e, 0.00mb, 0.00gb]: $ // 남은 공간 모두 사용함
partition> print
Part Tag Flag Cylinders Size Blocks
3 unassigned wm 250 - 1019 1.50GB (770/0/0) 3153920

[설명] 재부팅 해도 사용할 수 있게 저장합니다.
partition> label
Ready to label disk, continue? yes

[설명] 작업 종료
partition> quit
format> quit

[설명] 그럼 위에서 기억하라고 했던 Disk Slice name를 이용해서 제대로 적용 되었는지 확인 하겠습니다.
[root@calmmass:/]
# ls /dev/dsk/c2t0d0*
/dev/dsk/c2t0d0p0@ /dev/dsk/c2t0d0s10@ /dev/dsk/c2t0d0s3@
/dev/dsk/c2t0d0p1@ /dev/dsk/c2t0d0s11@ /dev/dsk/c2t0d0s4@
/dev/dsk/c2t0d0p2@ /dev/dsk/c2t0d0s12@ /dev/dsk/c2t0d0s5@
/dev/dsk/c2t0d0p3@ /dev/dsk/c2t0d0s13@ /dev/dsk/c2t0d0s6@
/dev/dsk/c2t0d0p4@ /dev/dsk/c2t0d0s14@ /dev/dsk/c2t0d0s7@
/dev/dsk/c2t0d0s0@ /dev/dsk/c2t0d0s15@ /dev/dsk/c2t0d0s8@
/dev/dsk/c2t0d0s1@ /dev/dsk/c2t0d0s2@ /dev/dsk/c2t0d0s9@

[설명] 포멧 작업을 하겠습니다. 파일 시스템은 ufs(Unix File System)으로 만들어 집니다.
[root@calmmass:/]
# newfs /dev/dsk/c2t0d0s0
newfs: construct a new file system /dev/rdsk/c2t0d0s0: (y/n)? y
/dev/rdsk/c2t0d0s0: 409600 sectors in 100 cylinders of 128 tracks, 32 sectors
200.0MB in 7 cyl groups (16 c/g, 32.00MB/g, 15360 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 65600, 131168, 196736, 262304, 327872, 393440,

[설명] 포멧 작업을 하겠습니다. 파일 시스템은 ufs(Unix File System)으로 만들어 집니다.
[root@calmmass:/]
# newfs /dev/dsk/c2t0d0s1
newfs: construct a new file system /dev/rdsk/c2t0d0s1: (y/n)? y
/dev/rdsk/c2t0d0s1: 614400 sectors in 150 cylinders of 128 tracks, 32 sectors
300.0MB in 10 cyl groups (16 c/g, 32.00MB/g, 15360 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 65600, 131168, 196736, 262304, 327872, 393440, 459008, 524576, 590144,

[설명] 포멧 작업을 하겠습니다. 파일 시스템은 ufs(Unix File System)으로 만들어 집니다.
[root@calmmass:/]
# newfs /dev/dsk/c2t0d0s3
newfs: construct a new file system /dev/rdsk/c2t0d0s3: (y/n)? y
/dev/rdsk/c2t0d0s3: 3153920 sectors in 770 cylinders of 128 tracks, 32 sectors
1540.0MB in 34 cyl groups (23 c/g, 46.00MB/g, 11264 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 94272, 188512, 282752, 376992, 471232, 565472, 659712, 753952, 848192,
2261792, 2356032, 2450272, 2544512, 2638752, 2732992, 2827232, 2921472,
3015712, 3109952,

[설명] 파일 시스템은 ufs(Unix File System)으로 만들어 졌는지 확인 합니다.
[root@calmmass:/]
# fstyp /dev/dsk/c2t0d0s0
ufs
[root@calmmass:/]
# fstyp /dev/dsk/c2t0d0s1
ufs
[root@calmmass:/]
# fstyp /dev/dsk/c2t0d0s3
ufs

[설명] Disk를 디렉토리에 할당하기 위해서 디렉토리를 구성하고 마운트 작업을 진행 합니다.
[root@calmmass:/]
# mkdir /disk1 /disk2 /backup
[root@calmmass:/]
# mount -F ufs /dev/dsk/c2t0d0s0 /disk1
[root@calmmass:/]
# mount -F ufs /dev/dsk/c2t0d0s1 /disk2
[root@calmmass:/]
# mount -F ufs /dev/dsk/c2t0d0s3 /backup

[설명] 아래와 같이 정상적으로 마운트가 되었다면 모두 성공 하신 겁니다.
[root@calmmass:/]
# df -h
Filesystem size used avail capacity Mounted on
.. 생략 ..
/dev/dsk/c2t0d0s0 187M 1.0M 167M 1% /disk1
/dev/dsk/c2t0d0s1 281M 1.0M 252M 1% /disk2
/dev/dsk/c2t0d0s3 1.5G 1.5M 1.4G 1% /backup



+ 추가로 /etc/vfstab에 추가된 파티셔닝 재설정 해주기.



4. 재부팅 이후 hard 추가 방법

[설명] 첫번째 방법은 /root 홈디렉토리에 reconfigure 빈파일을 생성하면 부팅 할때 장치를 읽고 OS를 구동 시킵니다.
[root@calmmass:/]
# touch /reconfigure

[설명] 두번째 방법은 명령어를 이용해서 장치를 인지 할 수 있습니다.
[root@calmmass:/]
# reboot -- -r

[설명] 세번째 방법은 솔라리스 전용 키보드를 이용하는 방법입니다.
ok boot -r -> PROM

장치 인식이 완료되면 작업은 3번과 동일 합니다.



솔라리스는 리눅스보다 조금 어렵습니다.
윈도우는 C드라이브, D드라이브
리눅스는 /dev/sda, /dev/sdb
솔라리스는 /dev/dsk/c#t#d#s# 또는 /dev/dsk/c#d#s#
으로 구분 할 수 있는데 솔라리스는 sparc-IDE와 x86-IDE 많은 차이점이 발생 됩니다.
x86은 일반 컴퓨터로 사용하기 위한 방법으로 스카시 카드가 필요 없기 때문입니다.
하지만 sparc 서버같은 경우에는 스카시 카드 -> 케이블 -> 각각의 디스크로 구성 되어있기 때문입니다.

여러가지 어려운 Disk의 세계에서 조금 벗어난 기분이지만 아직 더 공부를 해야 할 것 같습니다.










반응형
반응형

출처 : http://kyosi3t.tistory.com/6



Solaris에서 Package 관리 관련 명령어
 

- pkginfo 명령어

# pkginfo | more (전체 패키지 확인)

# poginfo -l SUNWab2s (SUNWab2s에 대한 상세 정보 출력)

# pkginfo | wc -l  (패키지 수 확인)

# pkginfo -d /cdrom/sol_8_u3_sparc/s0/solaris_8/Product | more

  (CD-ROM으로부터 패키지 정보 확인)

# pkginfo -d /cdrom/sol_8_u3_sparc/s0/solaris_8/Product -l SUNWaudio | more

  (CD-ROM으로부터 SUNWaudio 패키지 정보 확인)

 


- pkgadd 명령어

# pkgadd -d .  (현재 directory에서 directory형태로 되어 있는 패키지 모두 설치)

# pkgadd -d SUNWsan (현재 directory의 패키지중 SUNWsan 패키지만 설치)

# pkgadd -d /cdrom/sol_8_u3_sparc/s0/solaris_8/Product SUNWaudio

 (CD_ROM으로부터 SUNWsan 패키지 설치)

# pkgadd -d /cdrom/sol_8_u3_sparc/s0/solaris_8/Product -s spool SUNWaudio

 (/var/spool/pkg 디렉토리로 복사)

 


- pkgrm 명령어

# pkgrm SUNWsan

# pkgrm -s spool SUNWsan  (/var/spool/pkg로 제거된 패키지 저장)

# pkgrm -s /export/pkg SUNWsan  (spool 디렉토리 /export/pkg로 제거된 패키지 저장)

 


- pkgchk 명령어

 파일 정확성 검사 : 파일 퍼미션, 소유자, block or character device의 major/minor, 파일   크기, checksum, 수정날짜 등.

 (-l : 자세한 정보 제공

  -v : 검사한 파일리스트 제공

  -p path: 경로명의 정확성 검사 )

# pkgchk SUNWsan

#          <-- 아무런 message도 없으면 성공적인 설치

# pkgchk -v SUNWsan  (패키지에 포함된 file list)

 


# pkgchk -p /etc/passwd

  (설치시 /etc/passwd와 현재의 /etc/passwd의 변화된 정보를 보여줌)

# pkgchk -l -p /usr/bin/ls  (패키지 설치 정보 검사)

 


- /var/sadm/install/contents 파일

 pkgadd에 의해 패키지가 추가될 때마다 /var/sadm/install/contents에 정보 추가.

# grep pkgadd /var/sadm/install/contents  (pkgadd에 대한 정보를 출력)



출처 : http://www.ioneit.co.kr/ver1/bbs/board.php?bo_table=tiptech1_1&wr_id=46&page=2


이곳에서는 Solaris Sparc version의 Package & Patch에 관하여 설명하도록 하겟습니다.
    우리가 System으로 어떠한 일을 하는데 있어서 단순히 OS만을 설치하고 이것만을 사용하지는 않을 것 입니다.  대부분 어떤 작업을 하는데 있어서 좀더 편리하고, 좀더 좋은 부가적인 프로그램을 덧붙여 사용하겠죠. 파일을 압축하여 용량을 줄이는 압축프로그램, E-MAIL을 주고 받을 수 있는 E-MAIL프로그램, APHACHE, C compiler,.....등 사용자가 필요한 프로그램을 다운, 설치하여 사용합니다.

    과연 Solaris System에서는 어떻게 프로그램을 다운 받아, 설치하여 사용하는지 알아보기로 하겠습니다

SUN package
    MS나  리눅스등의 OS에서 응용프로그램을 설치하기 위해서 인스톨파일이나 RPM등을 사용하는데
    Solaris에서는 응용프로그램들을 그룹단위로 묶어 배포하는데 이를 Package라 칭합니다.
    먼저 가장 쉽게 Sun package를 접 할 수 있는것이, System 구입시 첨부되는 CD입니다. 그리고 웹 상에서도 이를 구할 수 있습니다
    Package식 배포에는 장점과 단점을 가지고 있는데,
  • 장 점 : 다른 OS와 달리 설치, 제거가 용이하다
              응용프로그램의 소스를 컴파일하여 설치를 할 경우 설치된 곳에 다른 응용프로그램도 
              같이 들어있을 가능성이 크다. 나중에 이러한 프로그램을 다시 삭제할 필요가 생겼을 
              때 해당 응용프로그램만 지운다는 것은 거의 불가능에 가깝다고 볼 수 있다.
  • 단 점 : 패키지의 종류가 많지 않다.
              패키지의 환경을 마음대로 바꿀 수 없다  

SUN 패키지 설치 이전에..
    1. 우선 System의 남은 용량을 확인합니다. ( df  -k )
2. System의 어느 디렉토리에 설치할 것 인지를 정한다.
    3. 웹이나 ftp를 통해서 다운을 받습니다.
    4. 일단 다운받은 패키지의 압축을 풉니다. (거의 파일이 압축되어있음.)
        - Z (uncompress 파일명), gz (gzip -d 파일명), zip (zip -d 파일명).. 이렇게들 풀면되구요
        - gzip 파일로 압축되어 있는건  먼저 gzip 패키지를 설치하셔야 합니다.
    5. pkgadd -d . 명령을 써서 패키지를 설치합니다.

     ※ 솔라리스의 패키지를 제공하는 사이트입니다.  http://www.sunfreeware.com

SUN 패키지 설치하기 

    pkgadd 명령 

    패키지를 추가하는 명령어이다. pkgadd에 대한 여러 옵션 중에서 가장 기본적이며 많이 쓰이는 것은 ‘-d’옵션이다. 이를 사용하지 않으면 패키지를 설치하지 못한다.
    아래의 예를 보면 pkgadd -d 다음에  "."을 붙이는데 이는 현재 디렉토리의 안에 있는 패키지들을 추가한다는 뜻입니다. "." 하나 땜에 애먹을 수 있습니다. 주의 하시기 바랍니다. 
    ※ 패키지를 추가할 때에는 SUPER-USER가 아니면 추가시킬 수 없슴.(root계정을 말하는 거예요)

    pkgadd [ -d [device | patname]] pkg_nmae

[leemary:/var/spool/pkg] pkgadd -d .
    다음과 같은 패키지를 사용할 수 있습니다.
      1  SUNWaudio     Audio applications
                       (sparc) 3.6.4,REV=1.98.08.13
    처리할 패키지(들)를 선택하십시오.(또는 모든 패키지를
    처리하려면'all'을 입력하십시오.) (default: all) [?,??,q]: 1
             *
             *
    ## 패키지 정보 처리 중
    ## 시스템 정보 처리 중
    ## 패키지 종속성 검증
             *
             *
    ## 1째 (전체: 1) 부분 설치
    <SUNWaudio>(이)가 성공적으로 설치되었습니다.
    다음과 같은 패키지를 사용할 수 있습니다.
      1  SUNWaudio     Audio applications
                       (sparc) 3.6.4,REV=1.98.08.13

     

SUN 패키지 삭제하기 

    pkgrm 명령

    이명령어는 현재 설치되어 있는 패키지를 삭제하고 싶을 때 사용하는 것으로, 사용법은 다음과 같습니다.
    pkgchk  package_name

# pkgrm SUNWaudio
     현재 설치되어 있는 패키지는 다음과 같습니다:
       SUNWaudio       Audio applications
                       (sparc) 3.6.4,REV=1.98.08.13
    이 패키지를 제거하겠습니까? y
    ## 설치된 패키지 예 <SUNWaudio> 제거
    ## 패키지 종속성 검증
    경고:
        <SUNWolrte> 패키지는 현재 제거되는 패키지에
        종속되어있습니다.
                       *
                       *
    이 패키지를 계속 제거하겠습니까? y
    ## 패키지 정보 처리 중
    ## 시스템 정보 갱신 중
    <SUNWaudio>(이)가 성공적으로 제거되었습니다.

패키지에관한 부가적 명령

    pkginfo 명령

    지정된 패키지의 정보를 알 수 있는 명령어로서, 일정패키지 폴더안에 pkginfo라는 file이 생성되어 있고, 안에 패키지의 정보에 대한 파라키터 값들이 저장되어있다.
    pkginfo [ -d [device | pathname] ] [ -l ] pkg_name

    -d : 패키지 소프트워에가 존재하고 있는, 장치명이나 절대디렉토리를 지정.
    - l : 지정 패키지의 세부적인 사항을 보고 싶을 때..
     
    다음은 Solaris 7 media에 있는 패키지를 사용한 예입니다.

# pkginfo -d /cdrom/cdrom0/s0/Solaris_2.7/Product |more
   system      FJSVhea        SunOS Header Files for FUJITSU platform specific
   system      FJSVvplr.u     Fujitsu platform specific symlinks (Root)
   system      FJSVvplr.us    Fujitsu platform links
   system      FJSVvplu.u     Fujitsu platform specific symlinks (user)
# pkginfo -d /cdrom/cdrom0/s0/Solaris_2.7/Product -l SUNWaudio
   PKGINST:  SUNWaudio
   NAME:  Audio applications
                    *
                    *
   VERSION:  3.6.4,REV=1.98.08.13
    FILES:      9 스풀된 경로 이름
                 2 디렉토리
                 3 실행 가능
                 4 패키지 정보 파일
               700 블록이 사용됨 (추정치)

     ※ pkginfo | wc -l : 현재 system에 install 되어있는 pkg의 숫자를 확인할 때 사용합니다.

    pkgchk 명령

    패키지 체크 명령어는 어떤 패키지의 추가 이후 system에 변경된 값을 기존과 비교하여 나타내주는 명령어입니다.
    패키지를 설치한후 지금과 변경된 값이 없을 경우 아무것도 디스플레이 하지 않는다
    pkgchk [-p path1, [path2..]]

# pkgchk -p /etc/group
 ERROR: /etc/group
    file size <278> expected <313> actual
    file cksum <23586> expected <25899> actual


참고 

Package의 유형

    아래의 예문  gawk-3.0.4-sol7-sparc-local.gz,  sunvts_40.tar.gz과 같은 두개의 패키지 파일이 있습니다
    이 파일의 압축을 풀고 내용을 보면 디스플래이 되는 화면이 다르다는 것을 느낄수 있을 것입니다.
    gawk-3.0.4-sol7-sparc-local.gz은 압축을 풀어도 하나의 파일이 생성이 되고 그 파일의 내용을 보면 
    패키지 파일의 이름이나 버젼등의 정보가 수록 되어있습니다.  달리 sunvts_40.tar.gz파일의 압축을 
    풀어보면 디렉토리가  생성이 되고 그 안에 패키지 정보나 기록위치등이 포함된 파일이 생성되어 
    있습니다. 이 두 유형의 패키지는 파일의 형태만 다를 뿐 설치하는 방법은 같습니다.

# ls
   gawk-3.0.4-sol7-sparc-local.gz

# gzip -d gawk-3.0.4-sol7-sparc-local.gz
# ls
   gawk-3.0.4-sol7-sparc-local
# more gawk-3.0.4-sol7-sparc-local
# PaCkAgE DaTaStReAm
   SMCgawk 1 3454
# end of header
gawk
NAME=gawk
ARCH=sparc
VERSION=3.0.4
CATEGORY=application
VENDOR=Free Software Foundation
EMAIL=steve@smc.vnet.net
PSTAMP=Steve Christensen
BASEDIR=/usr/local
CLASSES=none
0030939000081a40000000a0000000a0000000138ab966d00000d1b000000200000004a00
000000000000000000000f00000003SMCgawk/pkgmap: 1 3454
 

# ls
   sunvts_40.tar.gz
# gzip -d sunvts_40.tar.gz
# ls
   sunvts_40.tar
# tar xvf sunvts_40.tar
x SUNWvts, 0 bytes, 0 테이프 블록 
x SUNWvts/install, 0 bytes, 0 테이프 블록 
x SUNWvts/install/checkinstall, 4014 bytes, 8 테이프 블록 
x SUNWvts/install/copyright, 59 bytes, 1 테이프 블록 
# ls -al
drwxr-xr-x 11 root other 512 3월 25일 23:57 .
drwxrwxr-x 3 root sys 512 3월 12일 14:18 ..
drwxrwxr-x 4 root other 512 1999년 12월 23일 SUNWvts
drwxrwxr-x 3 root other 512 1999년 12월 23일 SUNWvtsmn
drwxrwxr-x 4 root other 512 1999년 12월 23일 SUNWvtsx
-rw-r--r-- 1 root other 17776128 3월 25일 23:56 sunvts_40.tar
#cd SUNWvts 
# ls
install pkginfo pkgmap reloc reloc.cpio.Z


    contents file
    /var/sadm/install/contents file은 설치된 pakage에 대한 log가 수록되어있다
    system의 패키지에 관한  정보를 알 수 있다.

 

 

SUN 패치..

    언제라도 발생할 수 있는 보안 침해나, 버그, y2k, 업그래이드 사항에 대하여 썬에서는 솔라리스 각 버전에 대해서 패치를 정기적으로 제공해준다.
    특히 y2k 패치가 안되어 있는 OS는 해당되는 패치를 해주어야 한다.

    패치 넘버
    솔라리스에서는 독특한 패치 ID를 부여한다. 예로 110281-02를 보면 패치넘버 110281의 두 번째 업그래이드 버전이라는 걸 알 수 있다

     

패치 구하기

    썬에서 제공하는 패치는 여러곳에서 구할 수 있으나, 대표적으로 http://sunsolve.sun.com/
    에서 쉽게 다운받을 수 있다. http, ftp로의 다운을 제공하며 패치에관 한 Report를 제공한다.
     

  • Patchfinder

    OS별로 추천되는 패치를 받을 수가 있다. 여기서는 사용자가 선택을 할 수가 없으며 단순히 썬에서 권고하는 여러 패치 ID가 하나의 파일로 압축되어져 있는 것을 다운 받을 수 있다. 그렇다고 이곳에서는 특정 패치 ID를 다운받을 수 없는 것은 아니다. Find Patch라는 패치 ID검색 기능이 있어서 이곳에서 원하는 패치 ID를 검색하여 다운 받을 수 있다. 

  • Recommended & Security Patches 
    OS별, 보안관련 패치로 분류되어 있다. 이중 패치하고자 하는 것을 선택하면 여러 패치 ID리스트가 나올 것입니다. 리스트에서 사용자가 원하는 것만 클릭해서 다운로드를 받을 수 있고 모두 받을 수도 있습니다. 선택한 것을 다운로드 받으면‘ Recommended.zip과 같이 하나의 압축파일 형태로 제공이 됩니다..

 

패치를 하기 이전에

    패키지를 설치하거나 패치를 하기 이전도 패키지 설치와 마찬가지 입니다.  System의 상황을 파악
    하여야 하고. 다운받을 곳의 위치와 필요 패키지의 설치 여부 등을 파악해야 됩니다.
    또한 자신의 서버에 어떤 패치가 설치되어 있는지에 대한 정보를 수집한다 이러한 설치된 패치 정보를 보기위해서 showrev라는 명령어를 사용한다. 이 명령어는 머신이나 소프트웨어의 정보를 보여주는 명령어이다. 

    showrev [-a] [-p] [-w] [-c command] 

    -a : 모든 정보를 보여준다. 
    -p : 패치에 관한 정보만을 보여준다. 
    -c command : 입력된 명령어(command)에 대한 정보를 보여준다. 

# showrev
Hostname: leemary
Hostid: 80c5575c
Release: 5.7
Kernel architecture: sun4u
Application architecture: sparc
Hardware provider: Sun_Microsystems
Kernel version: SunOS 5.7 Generic 106541-15 January 2001

     

패치 하기

    먼저 패치 파일을 다운받아야 겟죠.
    그리구 zip파일을 이용하여 압축을 풉니다.

     

    patchadd 명령

     patchadd    patch ID

    패치를 추가하는 명령어이다.  README 파일을 꼭 참조하시고 명령을 실행하시기 바랍니다.
    다음은 Solaris 7 OS 의 패치파일모음인 7-Recommended 파일을 다운받아 압축을 풀어 생성된
    7-Recommeded폴더의 내용과 인스톨 시키는 과정입니다.
    개별적인 패치와 달리 Recommended 패치는 install_cluster파일을 실행시켜 주시면 됩니다.
     

# ls
106300-09        107200-12        107794-01        108756-01
106327-08        107259-02        107834-03        108758-01
                            *
                            *
107115-07        107654-08        108662-01        CLUSTER_README
107148-08        107684-02        108721-02        copyright
107149-07        107702-07        108748-01        install_cluster
107171-08        107709-12        108750-01        patch_order
107180-27        107792-02        108754-01
# install_cluster
Patch cluster install script for Solaris 7 Recommended
*WARNING* SYSTEMS WITH LIMITED DISK SPACE SHOULD *NOT* INSTALL PATCHES:
With or without using the save option, the patch installation process
will still require some amount of disk space for installation and
administrative tasks in the /, /usr, /var, or /opt partitions where
patches are typically installed.  The exact amount of space will
depend on the machine's architecture, software packages already 
installed, and the difference in the patched objects size.  To be
safe, it is not recommended that a patch cluster be installed on a
system with less than 4 MBytes of available space in each of these
partitions.  Running out of disk space during installation may result
in only partially loaded patches.  Check and be sure adequate disk space
is available before continuing.
Are you ready to continue with install? [y/n]: y
Determining if sufficient save space exists...
Sufficient save space exists, continuing...
Installing patches located in /export/home/7_Recommended
Using patch_order file for patch installation sequence
Installing 106960-01...
  Installation of 106960-01 failed. Return code 2.
Installing 107038-01...
  Installation of 107038-01 failed. Return code 2.
Installing 107171-08...
                            *
                            *
                            *
 Interrupted ... Please wait
The following patches were not able to be installed:
        106960-01
        107038-01

For more installation messages refer to the installation logfile:
  /var/sadm/install_data/Solaris_7_Recommended_log
Use '/usr/bin/showrev -p' to verify installed patch-ids.
Refer to individual patch README files for more patch detail.
Rebooting the system is usually necessary after installation.
[leemary:/export/home/7_Recommended]

    ※ 패치시 패치실패 메시지가 나오면서 설치가 안되는 경우가 발생합니다. 이때 에러코드를 참조하시고
        대부분의 패치에러는 각 System에따라 필요하지 않은 패치들입니다.

     

패치 삭제하기


    patchrm 명령

    patchrm    patch ID

    추가되어 있는 패치를 삭제 시키는 명령어입니다.
    System에 패치를 시켰을 때 간혹 버그가 발생하는데, 이때 보조 디바이스를 사용하지 못한다거나 하는
    문제가 발생할 수 있습니다. 이럴 경우 해당 패치를 삭제시켜 주어야 합니다.

# patchrm 106300-09
Checking installed patches...
Patch 106300-09 has not been applied to this system.
Patchrm is terminating.

 


반응형
반응형

 

 

원래 솔라리스 SPARC 관련 패키지는 sunfressware.com에서 받을 수 있었다.

하지만 어느순간 유료가 되버린 사이트..

 

해메고 해매다 아래 사이트 들을 발생할 수 있었다.

차 후 참고하자

 

http://ftp.twaren.net/Sun/sunfreeware.com/sparc/5.8/

http://sunfreeware.lib.tsinghua.edu.cn/forsunsites/programlistsparc8.html#zlib

 

반응형
반응형

 

 

 

우선 기본적으로 솔라리스 8에서 정확한 이유는 모르겠지만 jdk 1.7 이상이 설치가 잘 안됐다...

이유는 잘 모르지만 어쨋든.

 

SunStudio 11설치를 위해 1.6u45를 받아서 설치를 해봤더니 무수한 Exception 에러...

그렇다면 뭐가 문제인고 찾아보니.. 1.4.2 나 1.5 설치를 권장한단다. 1.6.10... 정도였나 12였나

어쨋든 그 이하 버전을 설치 해야 한다는데 안전하게 1.5 버전을 설치 했다.

 

 sparc jdk 설치를 하려면 32비트와 64비트가 있는데

 

jdk-1_5_0_22-solaris-sparc.tar.Z - 32비트

jdk-1_5_0_22-solaris-sparcv9.tar.Z - 64비트

 

두가지를 받아야 한다.

64비트 jdk 설치를 위해서는 32비트를 먼저 설치해야 하는데 처음에 Z 확장자가 뭔가해서 당황했지만..

예전 유닉스 압축 형태란다.

 

uncompress [파일명] 혹은 gzip 으로 평소에 압축해제 하듯이 압축을 풀면 잘 풀린다.

그 다음 나오는 SUNW 관련 패키지 들이 있는데

 

SUNW[version]rt

SUNW[version]dev

 

대충 설명을 읽어보니 두개는 필수 인 것 같다. 더불어 SUNW[version]cfg, SUNW[version]man 등도 같이 설치하자.

나머지 한개 패키지는 아마도 일본어 관련 패키지 인것 같다.

 

64비트 패키지도 설치

SUNW[version]rtx

SUNW[version]dvx

 

설치가 정상적으로 끝나면 /usr/jdk/jdk[version] 에 설치가 완료된다.

jdk 버전 확인도 잊지 말자

/usr/jdk/jdk[version]/bin/java -version

/usr/jdk/jdk[version]/bin/java -d64 -version

 

profile 등록

export JAVA_HOME=/usr/jdk/jdk[version]

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:.:$CLASSPATH

 

솔라리스 8에는 기본적으로 1.2.2 인가? 로 설치되어 있는데 /usr/bin 에 모든 사용자를 위해 링크를 변경해 놓자.

ln -s /usr/jdk/jdk[version]/bin/java /usr/bin/java

ln -s /usr/jdk/jdk[version]/bin/javac /usr/bin/javac

 

끝.

반응형
반응형
< Solaris_10 Hostname 변경 >

 

Solaris 8~9는 전부 다, 10부터는 1~3까지만 등록

 

1. /etc/inet/hosts에 name 등록

2. /etc/nodenames에 name 등록

3. /etc/hostname.인터페이스에 name 등록

4. /etc/net/ticlts/hosts에 name 등록

5. /etc/net/ticotsord/hosts에 name 등록

[출처] Solaris Hostname 변경|작성자 KREUZ

■ 작업할 파일
(1) /etc/inet/hosts ( /etc/hosts 같은 파일)
(2) /etc/inet/ipnodes
(3) /etc/nodename (없는 파일은 생성해야함)
(4) /etc/hostname.e1000g0 (pcn0 일수도 있음)
(5) /etc/net/ticlts/hosts
(6) /etc/net/ticots/hosts
(7) /etc/net/ticotsord/hosts
(8) /etc/syslog.conf (mail 에러 메시지 관련 수정)
  

 
(1) /etc/inet/hosts

 [변경 전]

 # cat /etc/inet/hosts
::1 localhost
127.0.0.1 localhost
192.168.xxx.xxx unknown # Added by DHCP

 

 [변경 후]

 # cat /etc/inet/hosts
::1 localhost
127.0.0.1 localhost
192.168.xxx.xxx [HostName] # Added by DHCP

 
(2) /etc/inet/ipnodes

 # cat /etc/inet/ipnodes
::1 localhost
127.0.0.1 localhost
192.168.xxx.xxx [HostName] # Added by DHCP

 
(3) /etc/inet/nodename

 # cat /etc/nodename
cat: cannot open /etc/nodename

 # vi /etc/nodename
[HostName]

 
(4) /etc/inet/nodename

 # cat /etc/hostname.e1000g0

 

 # vi /etc/hostname.e1000g0
[HostName]

 # cat /etc/hostname.e1000g0
[HostName]

 
(5) /etc/net/ticlts/hosts

 # vi /etc/net/ticlts/hosts
[HostName] [HostName]

 
(6) /etc/net/ticots/hosts

 # vi /etc/net/ticots/hosts
[HostName] [HostName]

 
(7) /etc/net/ticotsord/hosts

 # vi /etc/net/ticotsord/hosts
[HostName] [HostName]

 

 

(8) 재부팅 후 Host 변경 및 네트워크 확인
# reboot
# ifconfig -a
 
반응형
반응형

 

 

참고는 여러 블로그를 참고했슴

 

우선 Solaris에서 랜카드 종류마다 약간씩 이름이 다른데 아래와 같다.

 

Cpu - SPAC

scmin - 1000 baseT

bge    - 1000 baseT 

ce      - 1000 baseT

ge      - 1000 baseSX

hme    - 100  bastT

gfe     - 1000 baseT

 

Cpu - X86

e1000g - 1000 baseT

elx      - 100 baseT

pcn     - 1000/100 baseT

 

1. 우선 호스트 이름을 바꾸려면 /etc/hosts 파일을 수정해야 한다.

etc/hosts 파일은 /etc/inet/hosts 파일에 링크되어 있으며 처음에 아마 ReadOnly 일꺼니깐 chmod로 변환해서 수정해주면 되겠다.

 

맨 마지막 줄에 호스트 고유 정보를 추가해주면 되겠다. 구분자는 tab 키이니 유념바람.

::1    localhost

127.0.0.1        localhost

[호스트 IP]    [호스트 이름]    loghost

 

2. 그 다음 게이트 웨이 주소 기본 라우팅 주소를 설정해줘야 한다.

/etc/defaultrouter 에 해당 정보를 기록해주면 된다. 없으면 만들면 된다. 딱 한줄만 넣어주면 됨.

[기본 라우팅 주소]

3. 그 다음 넷마스크를 설정해주자.

/etc/netmasks의 맨 마지막 줄에 설정해주면 되는데

해당 IP 주소의 0 주소와 넷마스크를 입력

[해당 아이피 주소 4번째 자리에 xxx.xxx.xxx.0] [넷 마스크]

 

4. 그 다음 DNS로 사용할 nameserver 정보를 입력.

/etc/resolv.conf

nameserver 168.126.63.1

nameserver 168.126.63.2

domain kns.kornet.net

 

5. 마지막 dns 설정 /etc/nsswitch.conf 에서 host 엔트리에 dns를 추가해야 한다.

hosts : file dns

 

 

자 이제 추가로 하드웨어 네트워크 카드에 ifconfig 정보를 바인딩 해주는 방법인데

위에 했을시 잘 되면 추가로 설정할 필요는 없고 추가적인 팁으로 알아놓자.

 

plumb는 커널에 특정 네트워크 카드를 연결시킬때 사용한다. unplumb는 연결 해제시 사용.

ifconfig e1000g0 unplumb

ifconfig e1000g0 plumb

 

up을 이용하면 e1000g0 인터페이스에 특정 ip주소와 netmask를 올려준다.

ifconfig e1000g0 [호스트 IP 주소] netmask [넷마스크 주소] up

 

인터페이스가 특정 ip와 서브넷을 물고 있으려면 특정 파일을 수정해 줘야 한다.

파일 수정을 안하면 Reboot시 설정한 ip 주소가 사라지니 유의해야 한다.

 

1. vi /etc/hostname.[인터페이스명] 파일에 호스트 ip 주소 한줄 추가해주면 된다.

[호스트 이름]

 

라우팅 테이블을 확인해보자

 

netstat -nr

default라고 되있는 부분이 게이트 웨이 주소다. 게이트 웨이 추가 및 삭제는

route add[delete] defualt xxx.xxx.xxx.xxx

 

네트워크 관련 설정 파일을 다시 읽어 들이려면

svcadm -v restart svc:/milestone/network:default 네트워크 서비스 재시작

svcadm restart network/physical

 

반응형
반응형

 

솔라리스 10 u10의 경우 telnet과 ssh는 자동으로 설치된다.

하지만 처음에는 root 계정으로 터미널에 접속할 수 없는데 그 이유는 보안문제인지... 어쨋든

 

ssh와 telnet으로 root를 접속하고자 하면 아래의 3가지를 수정해야 한다.

 

---------------------------------------------------------------------------

참고 : http://wooriwil.blog.me/20105449038

 

1. [SSH & sFTP]

# vi /etc/ssh/sshd_config

132 PermitRootLogin yes     // no 에서 yes로 변경

#svcadm restart ssh

 

2. [Telnet]

# vi /etc/default/login

18 #CONSOLE=/dev/console // 주석 처리

 

3. [FTP]

# vi /etc/ftpd/ftpusers

5 #root                     // 주석처리

 

---------------------------------------------------------------------------

 

그 다음은 gcc를 설치해야 한다.

gcc는 libiconv 에 dependency가 걸려 있어서 libiconv 먼저 설치해야 한다.

 

해당 사이트에서 관련 패키지 들을 받을 수 있다. (가입해야 됨)

www.sunfreeware.com

 

Solaris 10의 경우

intel의 경우는 x86/Soraris

Spac의 경우 SPAC/Soraris

 

구분되어 있으니 잘 확인하고 받자.

 

gcc를 누르면 Dependencies의 libiconv를 누르고 해당 패키지 먼저 다운 받자.

뭐 시기 마다 다르니.. 일단 이 포스트를 쓸때는 libiconv-1.14-sol10-x86-local.gz 이게 최신임.

 

운영체제에서 직접 받던 받아서 ftp로 올리던...

어쨋든 적당한 위치에서 압축을 푼다.

gzip -d libiconv-1.14-sol10-x86-local.gz 또는 gunzip libiconv-1.14-sol10-x86-local.gz

 

그 다음 설치..

pkgadd -d libiconv-1.14-sol10-x86-local

 

엔터랑 y 잘 눌러서 설치 한다.

만약에 패키지를 한곳에 모으고 싶으면 /var/spool/pkg로 복사해서 설치할 것.

 

그다음 gcc를 받아 압축을 풀고 설치 한다. gcc-3.4.6-sol10-x86-local.gz

gzip -d gcc-3.4.6-sol10-x86-local.gz

pkgadd -d gcc-3.4.6-sol10-x86-local

 

만약 gcc를 설치했을 때 이상이 있으면 Solaris 10 설치 CD 패키지에

SUNWarc라는 패키지를 재설치 해본다. 위치는 cdrom/sol_10_811_x86/Solaris_10/Product/SUNWarc 임.

해당 패키지를 /var/spool/pkg로 옮긴 뒤

pkgadd -d /var/spool/pkg로 재설치. 잘 되어 있으면 안해도 됨.

 

자 그 다음 gcc의 환경 변수를 설정할 차례다.

/etc/profile에 PATH를 등록.

 

PATH=/usr/local/bin:$PATH 를 추가해주고. env로 확인해봤을시 현재 디렉토리가 PATH로 안 잡혀 있으면 . 추가 해줄것

ln -s /usr/local/bin /usr/bin/gcc 로 모든 사용자가 gcc를 사용할 수 있게 링크 추가.

 

마지막으로 설치가 잘 되었는지 확인해보려면 간단하게 하나 짜서 컴파일 해보면 된다.

#gcc

gcc : no input files

이렇게 나오면 정상이라고 할 수 있음.

 

---------------------------------------------------------------------------------------

자 이제 네트워크를 설정해보자.

해당 부분은 다음 글로 대체!

 

 

 

반응형
반응형

너무 좋은 글들... 최근 dump 분석 때문에 골머리 썩고 있었는데 완전 딱 맞는 자료를 발견했다...

 

 

http://blog.naver.com/bumsukoh/110114008655

 

 

이번 포스트에서는 Thread dump를 분석하기 전에 Thread들에 대한 정보를 확인하기 위한 유용한 OS 툴들에 대한 내용을 다루어 보겠습니다.

각 OS별로 프로세스 및 Thread 레벨로 상태를 확인하기 위한 명령어들을 제공합니다. 멀티 Thread 기반으로 운영체제들이 변해가면서 제공하는 기능들이 생겨나게 되었습니다.

 

여기서 설명드리는 OS 툴들은 모두 프로세스에 대한 Native Stack 정보를 출력하는 것입니다.

물론 java stack을 볼 수 없지만 문제가 발생한 Thread에 대한 Native Stack 및 Thread ID를 확인할 수 있습니다. 일부 Java Thread dump에서는 Native Thread ID를 통해 해당 Thread를 찾기도 합니다.

첫번째로 Solaris에서 제공하는 명령어에 대해 알아 보겠습니다.

 

Solaris에서 가장 유용하게 사용할 수 있는 프로세스와 Thread 모니터링 툴로는 prstat 이 있습니다.

prstat은 생각보다 굉장히 강력한 기능을 가지고 있습니다. 프로세스와 Thread의 CPU 자원 사용율 및 메모리 사용율을 알 수 있지만, CPU 사용율에 대한 microstat 정보를 확인 할 수 있어 굉장히 유용합니다.

 

저의 경우 이 prstat의 microstat정보를 유용하게 활용하여 시스템의 CPU 자원 사용의 문제점을 확인하고 디버깅한 경험이 있습니다.

prstat 명령어 사용법은 다음과 같습니다.

 

# prstat -L -m -p [프로세스 ID] [refresh interval]

옵션은 다음과 같습니다.

 

- "-L" 은 Thread 레벨의 정보를 출력합니다.

- "-m" 은 microstat 정보를 출력합니다.

- "-p" 은 모니터링할 프로세스 ID입니다.

- "refresh interval" 은 모니터링 정보 갱신 주기입니다.

 

다음은 prstat 출력 결과 예입니다.

==============================================================================================

PID USERNAME USR SYS TRP TFL DFL LCK SLP LAT VCX ICX SCL SIG PROCESS/LWPID

----------------------------------------------------------------------------------------
24565 mspbpp 0.8 0.1 0.0 0.0 0.0 0.0 99 0.2 198 1 198 0 java/14
24565 mspbpp 0.8 0.1 0.0 0.0 0.0 0.0 99 0.2 198 1 198 0 java/19
24565 mspbpp 0.4 0.1 0.0 0.0 0.0 0.0 99 0.2 198 0 198 0 java/15
24565 mspbpp 0.4 0.1 0.0 0.0 0.0 0.0 99 0.2 198 0 198 0 java/21
24565 mspbpp 0.4 0.1 0.0 0.0 0.0 0.0 99 0.2 198 0 198 0 java/24
24565 mspbpp 0.1 0.0 0.0 0.0 0.0 100 0.0 0.0 2 0 3 0 java/2
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 0.0 100 0.0 39 0 39 0 java/8
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 0.0 100 0.0 2 0 4 0 java/9
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 0.0 100 0.0 0 0 0 0 java/13
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 0.0 100 0.0 0 0 0 0 java/12
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 0.0 100 0.0 0 0 0 0 java/11
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 0.0 100 0.0 0 0 0 0 java/10
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 100 0.0 0.0 0 0 0 0 java/7
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 100 0.0 0.0 0 0 0 0 java/6
24565 mspbpp 0.0 0.0 0.0 0.0 0.0 100 0.0 0.0 0 0 0 0 java/5
Total: 1 processes, 26 lwps, load averages: 0.15, 0.15, 0.14

==============================================================================================

위와 같이 프로세스의 Thread별(LWPID)로 CPU 사용에 대한 상세 정보가 출력됩니다.

다음은 prstat의 수행 결과 항목입니다. (여기서는 CPU에 대한 항목 만 설명합니다.)

구분 설명
USER The percentage of time the process has spent in user mode.
SYS The percentage of time the process has spent in system mode.
LCK The percentage of time the process has spent waiting for user locks.
SLP The percentage of time the process has spent sleeping.
LAT The percentage of time the process has spent waiting for CPU.

이외 TRP, TFL, DFL, VCX, ICX, SCL, SIG 정보가 있습니다.

위의 결과 내용을 추출하여 분석한 결과 그래프(예시)를 살펴 보도록 하겠습니다.

이 그래프는 동일한 어플리케이션에 대해 사용자 수를 높이며 CPU 자원에 대한 사용 추이입니다.

눈여겨 볼 부분은 사용자가 많아 질 수록 SLP와 LCK 부분이 낮아 지며 LAT 부분이 높아 지는 것을 알 수 있습니다. 즉 사용자 량이 많아 처리량이 많아 질수록 초기에 LCK인 user locks (Java에서 object block이겠죠)과 SLP인 sleep (이 sleep도 대기상태입니다)이 높았다가 점점 낮아 집니다. 이는 Thread들이 일을 쉬지않고 열심히 더 하고 있다는 말이겠죠. 그러다 보니 LAT (CPU 할당 대기)가 점점 높아 지게 되는 것입니다.

여기에서 해당 시스템의 총 사용가능한 사용자에 대한 수치를 알 수 있습니다. 사실 이 작업을 할때는 패키지 제품에서 CPU 과부하가 있다는 것을 보여주기 위해 한것입니다. 결론적으로는 패키지의 CPU 과부하 버그를 조치한 경우입니다.

이렇게 prstat은 유용하게 사용할 수 있는 Solaris의 툴입니다.

그 다음으로는 pstack 명령어입니다.

pstack 명령어는 Solaris에서 프로세스의 Native Stack을 확인 할 수 있는 명령어입니다.(HP-UX에서도 사용합니다.)

이 pstack은 Native Stack (C 코드)만 확인 할 수 있습니다. java stack 에 대한 내용을 확인이 불가능하죠. 아예 나오지 않습니다. (Java 버전 1.5 이상에서는 pstack하고 유사한 jstack이라는 명령어가 제공됩니다. java stack을 Thread dump 없이 볼 수 있답니다.)

이러한 pstack은 JVM 내부의 흐름을 파악하기 위한 방법으로 유용하며, JVM의 Bug 같은 경우를 확인할 때 사용되기도 합니다.(사용되는 빈도는 극히 드물지만요..)

 

명령어 사용법은 다음과 같습니다.

 

# pstack [프로세스 ID]

 

출력 결과는 다음과 같습니다.

=============================================================================================

----------------- lwp# 25 / thread# 25 --------------------
ff2cc7f4 lwp_cond_wait (189b848, 189b830, 0, 0)
feb54b78 __1cCosNPlatformEventEpark6M_v_ (189b830, 45754, fed35879, 7c400, 189b800, fee069ec) + 108
fe5df09c __1cNObjectMonitorGEnterI6MpnGThread__v_ (323df0, 230c00, 323e00, fedb2000, 323e00, 1) + 1cc
fe53879c __1cNObjectMonitorFenter6MpnGThread__v_ (323df0, 230c00, 230c00, 2, 18a4678, 230e78) + 358
fec03c60 __1cSObjectSynchronizerKfast_enter6FnGHandle_pnJBasicLock_bpnGThread__v_ (ddbff834, ddbff908, 1, 230c00, 34800, d6a244) + a4
febad568 __1cNSharedRuntimebAcomplete_monitor_locking_C6FpnHoopDesc_pnJBasicLock_pnKJavaThread__v_ (ec450a70, ddbff908, 230c00, fede68e1, 6, fedb2000) + dc
fc055754 * weblogic/socket/SocketMuxer.readReadySocketOnce(Lweblogic/socket/MuxableSocket;Lweblogic/socket/SocketInfo;)Z+337 (line 1954)
fc63b53c * *weblogic/socket/DevPollSocketMuxer.processSockets()V [compiled] +12 (line 184)
fc005868 * weblogic/socket/SocketReaderRequest.run()V+3 (line 58)
fc005868 * weblogic/socket/SocketReaderRequest.execute(Lweblogic/kernel/ExecuteThread;)V+1 (line 84)
fc005d88 * weblogic/kernel/ExecuteThread.execute(Lweblogic/kernel/ExecuteRequest;)V+19 (line 288)
fc005868 * weblogic/kernel/ExecuteThread.run()V+32 (line 224)
fc00021c * StubRoutines (1)
fe561bdc __1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_ (fc0001c0, 230c00, 1, d6a230, e11c6fd8, ddbffe78) + 208
fe90aebc __1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_ (ddbffe70, d6a234, fee07100, d6a240, ddbffda0, 230c00) + ec
fe5f0adc __1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_ (d6a234, ddbffe6c, ddbffe68, ddbffe64, ddbffe60, fee07100) + 6c
fe603350 __1cMthread_entry6FpnKJavaThread_pnGThread__v_ (dfc33688, 230c00, 54c00, fee07434, fee07100, fee06dd4) + 110
fec2318c __1cKJavaThreadRthread_main_inner6M_v_ (230c00, 16, fedee064, 19, fedb2000, 0) + 48
feb4ccbc java_start (230c00, 234e, fedb2000, fed33c51, 18a4678, fee02a2c) + 22c
ff2c8a20 _lwp_start (0, 0, 0, 0, 0, 0)

=============================================================================================

위와 같이 JVM을 구현한 Native Stack 입니다. Java 1.6 버전상의 Weblogic 10g에 대한 Thread Native Stack입니다.

lwp# 25 / thread# 25 는 Thread의 ID입니다. lwp는 Light Weight Process라 하여 경량의 프로세스라 하여 Thread에 대한 통칭입니다.

이 Thread ID는 이후에 설명드릴 Thread dump에서 thread와 매핑할 수 있는 key가 됩니다.

 

위의 Thread Stack에서는 Weblogic Executor Thread에서 사용자 요청을 받기 위해 대기중인 것을 알 수있습니다. 그래서 stack의 최종 frame은 "lwp_cond_wait (189b848, 189b830, 0, 0)" 입니다.

그 외에 프로세스 debug를 위한 dbx 나 Solaris의 막강 프로파일 툴인 Dtrace등을 활용할 수 있으나, 굉장히 advanced한 내용으로 많은 지식을 필요로 합니다.

 

대부분은 위의 내용정도만 아셔도 트러블슈팅하는데 많은 도움이 됩니다.

다음 포스트에서는 "OS 툴을 잘 활용하라 !" HP-UX 에 대해 설명드리도록 하겠습니다.

장마가 끝나니 날씨가 장난이 아니네요. 다시 장마시즌이 점점 그리워지는건 왜일까요 ^^

몸 건강들 하시고 다음 포스트에서 뵙겠습니다.

그럼 이만

 

반응형
반응형

출처 : http://www.wowunix.com/cgi-bin/CrazyWWWBoard.cgi?mode=read&num=80&db=solaris&backdepth=1

프롬프트에 현재 디렉토리명을 넣으려면?


그것은 사용하는 쉘에 따라 다르다. 몇몇 쉘에서는 이것에 쉽지만
다른 쉘에서는 어렵거나 불가능 할 수도 있다.

C Shell (csh):
다음을 여러분의 .cshrc에 넣어서 프롬프트를 여러분이 원하는 대로 바꿀 수 있다.

alias setprompt 'set prompt="${cwd}% "'
setprompt # to set the initial prompt
alias cd 'chdir \!* && setprompt'

만약 pushd와 popd를 원하면 다음과 같이 하라

alias pushd 'pushd \!* && setprompt'
alias popd 'popd \!* && setprompt'

몇몇 C쉘은 $cwd 변수를 가지고 있지 않다. 그때는 `pwd`를 사용해야 한다.

여러분이 단지 현재 디렉토리의 마지막 구성요소만을 원한다면 여러분의 프롬프트에
다음과 같이 넣을 수 있다. 예를 들어("mail% ")

alias setprompt 'set prompt="$cwd:t% "'

몇몇 다른 옛날 csh은 &&와 ||를 반대의 의미로 사용하기도 한다.
다음을 사용해 보라.

false && echo bug

만약 "bug"라는 문자가 나오면 여러분은 &&와 ||를 바꾸어서 사용해야 한다.
그리고 더 나은 csh을 구해서 설치 하라.

Bourne Shell (sh):

만약 Bourne Shell의 새로운 버전을 가지고 있다면 여러분은 자신의 명령인
shell 함수를 만들 수 있다.

xcd() { cd $* ; PS1="`pwd` $ "; }

만약 Bourne shell의 옛날 버전을 가지고 있다면 좀 복잡하긴 하지만
불가능 한건 아니다. 여기 그 방법이 있는데, 다음을 .profile에 넣어라.

LOGIN_SHELL=$$ export LOGIN_SHELL
CMDFILE=/tmp/cd.$$ export CMDFILE
# 16 is SIGURG, pick a signal that's not likely to be used
PROMPTSIG=16 export PROMPTSIG
trap '. $CMDFILE' $PROMPTSIG

그리고나서 다음의 실행 가능 스크립트를 만들어서 여러분의 PATH에 해당하는
위치에 "xcd"라는 이름으로 넣도록 하라.

: xcd directory - change directory and set prompt
: by signalling the login shell to read a command file
cat >${CMDFILE?"not set"} < cd $1
PS1="\`pwd\`$ "
EOF
kill -${PROMPTSIG?"not set"} ${LOGIN_SHELL?"not set"}

그리고 나서 "xcd /some/dir"하면 디렉토리가 변경이 된다.

Korn Shell (ksh):

다음을 .profile에 넣어라:
PS1='$PWD $ '

단지 디렉토리의 마지막 구성요소를 원한다면 다음과 같이 하라
PS1='${PWD##*/} $ '

T C shell (tcsh)

Tcsh은 csh의 개선된 버전이며 몇가지 고유의 변수와 다른 몇몇 기능들을 가지고 있다

%~ 현재 디렉토리, $HOME에 대해 ~를 사용한다
%/ 현재 디렉토리의 full pathname
%c or %. 현재 디렉토리의 trailing component

그래서 이렇게 할 수 있다.

set prompt='%~ '

BASH (FSF's "Bourne Again SHell")

$PS1의 \w는 현재 디렉토리의 Full pathname을 뜻하며 ~는 $HOME에 대한 확장이다
그래서 위의 sh과 ksh 솔루션에 더하여 여러분은 다음을 사용할 수 있다.

PS1='\w $ '
또는
PS1='\W $ '

반응형

+ Recent posts