OS/SOLARIS2010. 3. 9. 15:27
반응형

1. ndd 커맨드를 이용한 방법

ndd -set /dev/hme adv_autoneg_cap 0 (오토센싱 기능 off)
ndd -set /dev/hme adv_100fdx_cap 1 (100Mbps 풀 듀플렉스 기능 on)
ndd -set /dev/hme adv_100hdx_cap 0
ndd -set /dev/hme adv_100T4_cap 0

/etc/init.d/inetsvc에 다음과 같은 문장을 추가한다.

/usr/sbin/ndd -set /dev/hme adv_100fdx_cap 1

2. /etc/system에 설정하는 방법

set hme:hme_adv_autoneg_cap=0
set hme:hme_adv_100hdx_cap=0
set hme:hme_adv_100fdx_cap=1


- tcp_time_wait_interval 조정

/usr/sbin/ndd -set /dev/tcp tcp_time_wait_interval 60000

or

/etc/system 파일에

set ip:ip_forwarding=0

+ /etc/system 설정 잘못으로 부팅이 안되는 경우

boot prom에서

boot -i로 부팅한 다음에

/etc/system을 참조할 때 /dev/null을 참조한다고 해서 부팅후에 다시 수정할 것


- tcp 설정 정보 조회

ndd -get /dev/tcp ?

- tcp tuning parameter 목록중에 자주 이용하는 것 정리.

+ tcp_time_wait_interval

Solaris 2.6 이전까지는 tcp_close_wait_interval 이다.

메모리에서 TCP 연결이 끊어져도 tcp가 쓰던 소켓 정보를 일정 기간 대기 상태로 가지고 있고, 이를 가지고 있는 시간인데 기본값은 240,000ms(4분)이지만, 이는 tcp 소켓을 많이 요구하는 서버, 즉 웹 서버에서는 너무 길게 waiting 하는 것이 메모리 낭비이므로 60,000ms(1분) 정도로 줄이는 것이 좋다. 그러나 이를 너무 줄일 경우, 커넥션 품질 자체가 불안할 수 있으므로 더 이상 줄이지 않는 것이 바람직하다.

+ tcp_conn_req_max_q0

TCP/IP 프로토콜 통신에서 half-open connection 상태, 즉 마지막 ACK를 받지 못한 상태의 커넥션을 몇 개까지 가지고 있을지에 대한 파라미터 값이다. 기본값은 1024인데 이 파라미터는 tcp_conn_req_max_q와 형태가 비슷하다고 무조건 늘리는 경우가 있는데 불필요하며, 이 파라미터는 completed connection 마저도 listen queue에 들어가지 못하는 경우를 제외하고는 변경할 필요가 없다.

+ tcp_conn_req_max_q

웹 서버 튜닝에서 가장 많이 사용하는 파라미터이다.
기본값은 128인데, 1024 이하 정도로 늘려주는 것이 바람직하다. 이는 completed connection이 실제 처리되기까지 받아주는 큐 크기로 너무 부족하면 상당히 바쁜 웹 서버의 경우, 사용자의 요청을 놓치는 경우가 발생할 수 있기 때문이다.

+ tcp_slow_start_initial

TCP 프로토콜 통신에서 처음에 테스트용으로 보내는 초기화 패킷 수를 말한다. Sun의 기본값은 1인데 다른 벤더들(특히 MS)이 2개를 사용하므로 변경해주는 것이 바람직하다.
솔라리스 8의 경우 가끔 4인 사례를 발견할 수 있었다.


- 네트워크 모니터링

netstat -s -Ptcp 커맨드를 이용하면 모든 프로토콜의 졍보를 출력하는데 -Ptcp라는 옵션을 추가하면 우리가 TCP 프로토콜의 파라미터를 변경하기 전 TCP와 관련한 정보만 출력해 준다.

trax´s note: trax가 사용하는 Solaris 2.4, 2.6 환경에서는 netstat -s -P tcp라고 사용한다. 아마 레퍼런스가 틀린 것이 아닌가 싶다.

ais011# netstat -s -P tcp


TCP tcpRtoAlgorithm = 4 tcpRtoMin = 200
tcpRtoMax =240000 tcpMaxConn = -1
tcpActiveOpens = 10737 tcpPassiveOpens = 53520
tcpAttemptFails = 491 tcpEstabResets = 53
tcpCurrEstab = 28 tcpOutSegs =2640894
tcpOutDataSegs =2411701 tcpOutDataBytes =2076891073
tcpRetransSegs = 18540 tcpRetransBytes =13528493
tcpOutAck =229065 tcpOutAckDelayed = 30144
tcpOutUrg = 0 tcpOutWinUpdate = 81
tcpOutWinProbe = 212 tcpOutControl =157770
tcpOutRsts = 26705 tcpOutFastRetrans = 6732
tcpInSegs =2187955
tcpInAckSegs =1496281 tcpInAckBytes =2076911268
tcpInDupAck = 88774 tcpInAckUnsent = 0
tcpInInorderSegs =770953 tcpInInorderBytes =343372713
tcpInUnorderSegs = 1019 tcpInUnorderBytes =1046324
tcpInDupSegs = 2854 tcpInDupBytes =372742
tcpInPartDupSegs = 245 tcpInPartDupBytes =142283
tcpInPastWinSegs = 0 tcpInPastWinBytes = 0
tcpInWinProbe = 0 tcpInWinUpdate = 198
tcpInClosed = 35 tcpRttNoUpdate = 13508
tcpRttUpdate =1459914 tcpTimRetrans = 12237
tcpTimRetransDrop = 366 tcpTimKeepalive = 358
tcpTimKeepaliveProbe= 12 tcpTimKeepaliveDrop = 0
tcpListenDrop = 0 tcpListenDropQ0 = 0
tcpHalfOpenDrop = 0

여기서 주목할 것은 tcpListenDropQ0와 tcpListDrop인데,
tcpListenDropQ0는 accept() system call시 drop된 것의 카운트이고
tcpListenDrop(Q)은 three-way handshake라고도 불리는 처음 두번째 ACK를 받기 전
incompleted connection이 큐에 들어가지 못한 카운트다.
반응형
Posted by [PineTree]