1. lsof 파일명

해당 파일에 접근하고 있는 프로세스들의 정보를 확인

 

lsof /root/jdk1.6.0_38/bin/java
COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
java    5768 root txt    REG  253,0    50794 2362680 /root/jdk1.6.0_38/bin/java
java    6868 root txt    REG  253,0    50794 2362680 /root/jdk1.6.0_38/bin/java

 

2. lsof 디렉토리명

해당 디렉토리에 접근하고 있는 프로세스 정보 확인
일반 디렉토리는 아무것도 출력되지 않는 경우가 많다.
/proc 이나 /dev 등은 정상 출력된다.

 

# lsof /proc
COMMAND     PID      USER   FD   TYPE DEVICE SIZE/OFF       NODE NAME
rsyslogd   1864      root    3r   REG    0,3        0 4026532043 /proc/kmsg
acpid      5840      root    3r   REG    0,3        0 4026531991 /proc/acpi/event
hald       5849 haldaemon   12r   REG    0,3        0 4026531983 /proc/mdstat
hald       5849 haldaemon   14r   REG    0,3        0      18330 /proc/5849/mounts
Xorg       6265      root    5w   REG    0,3        0 4026531963 /proc/mtrr
gnome-pow  6415       gdm   18r   REG    0,3        0 4026532038 /proc/stat

 

3-1. lsof -i

모든 네트워크와 연결되어있는 프로세스 정보 확인.
어떤 포트를 어느 프로세스가 사용하는지 확인할 때 유용하다.

 

# lsof -i
COMMAND     PID    USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
vsftpd     5974    root    3u  IPv4    18840      0t0  TCP *:ftp (LISTEN)
httpd     10961  apache    4u  IPv6 38110178      0t0  TCP *:http (LISTEN)
httpd     12015  apache    4u  IPv6 38110178      0t0  TCP *:http (LISTEN)
httpd     12402  apache    4u  IPv6 38110178      0t0  TCP *:http (LISTEN)
httpd     14208  apache    4u  IPv6 38110178      0t0  TCP *:http (LISTEN)

 

3-2. lsof -iTCP 혹은 lsof -iUDP

tcp나 udp를 필터링해서 확인

 

4. lsof -c 대몬명

해당 대몬과 연결되어 있는 프로세스와 파일 정보 확인

 

# lsof -c tnslsnr
COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
tnslsnr 3679 oracle  cwd    DIR                8,3     4096  554081 /home/oracle
tnslsnr 3679 oracle  rtd    DIR                8,3     4096       2 /
tnslsnr 3679 oracle  txt    REG                8,2   933484 3151962 /ORACLE/product/bin/tnslsnr
tnslsnr 3679 oracle  mem    REG                8,3   156872 1074448 /lib64/ld-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3    22536 1074455 /lib64/libdl-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3  1979000 1074449 /lib64/libc-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3   141576 1074452 /lib64/libpthread-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3   598800 1074450 /lib64/libm-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3   113952 1074459 /lib64/libresolv-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3   116368 1074488 /lib64/libnsl-2.12.so
tnslsnr 3679 oracle  mem    REG                8,2   228765 3150257 /ORACLE/product/lib/libclsra11.so
tnslsnr 3679 oracle  mem    REG                8,2 17319952 3150255 /ORACLE/product/lib/libhasgen11.so
tnslsnr 3679 oracle  mem    REG                8,2  3319072 3150259 /ORACLE/product/lib/libocrb11.so

 

5. lsof -p PID


해당 프로세스ID와 관련된 프로세스와 파일 정보 확인

 

# lsof -c tnslsnr
COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
tnslsnr 3679 oracle  cwd    DIR                8,3     4096  554081 /home/oracle
tnslsnr 3679 oracle  rtd    DIR                8,3     4096       2 /
tnslsnr 3679 oracle  txt    REG                8,2   933484 3151962 /ORACLE/product/bin/tnslsnr
tnslsnr 3679 oracle  mem    REG                8,3   156872 1074448 /lib64/ld-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3    22536 1074455 /lib64/libdl-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3  1979000 1074449 /lib64/libc-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3   141576 1074452 /lib64/libpthread-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3   598800 1074450 /lib64/libm-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3   113952 1074459 /lib64/libresolv-2.12.so
tnslsnr 3679 oracle  mem    REG                8,3   116368 1074488 /lib64/libnsl-2.12.so
tnslsnr 3679 oracle  mem    REG                8,2   228765 3150257 /ORACLE/product/lib/libclsra11.so
tnslsnr 3679 oracle  mem    REG                8,2 17319952 3150255 /ORACLE/product/lib/libhasgen11.so
tnslsnr 3679 oracle  mem    REG                8,2  3319072 3150259 /ORACLE/product/lib/libocrb11.so

'Knowledge > OS' 카테고리의 다른 글

cp 주의사항  (0) 2015.01.14
mount directory to directory  (0) 2015.01.14
Cacti Installation by yum on CentOS5  (0) 2014.07.22
RHEL 4 or 5 recommended kernel parameters  (0) 2013.08.12
find: Argument list too long 해결  (0) 2013.06.14
Posted by neo-orcl
,

Shared Memory
shmmax


한 shared memory 세그먼트의 최고 크기로 byte 단위. 이는 리눅스 프로세스가 할당할 수 있는 virtual address space이다.
hugepage를 쓴다면 hugepage의 수치와 맞게 정하는 것을 강력하게 추천하고 있다 by redhat. 그런데 예시 문서는 그냥 나누기 2를 하고 있다..
오라클은 총 메모리 사이즈의 50%를 정할 것을 추천하고 있다. 하지만 SGA 영역이 50% 이상으로 잡혀있다면 이리 하면 안되겠지

1. 오라클 권장대로 하자면
cat /proc/meminfo 로 확인
Memtotal: 16777216 kb

 

2. 계산: 16777216*1024/2 = 8589934592

3. 입력 /etc/sysctl.conf
kernel.shmmax=8589934592

 

shmmni


시스템의 shared memory 세그먼트 최고 갯수를 정한다. 오라클은 10g에서 최소 4096을 정할것을 권장하고, 4096이나 그 이상을 정하는게 좋다.
kernel.shmmni=4096

shmall

 

페이지 단위로, shared memory의 총 갯수로 시스템이 한번에(use at one time) 쓸수 있는 양이다.
OS 메모리/page_size
1. pagesize 확인
getconf PAGE_SIZE
4096
2. 16GB ram이라면 계산
16*1024*1024*1024/4096=4194304
3. /etc/sysctl.conf 적용
kernel.shmall=4194304


 

semaphore
세마포어는 공유 리소스(예:shared memory)를 사용하는 프로세스와 같이 동작하는 프로세스 혹은 쓰레드간의 동기화를 위해 사용되는 counter이다.
어플리케이션이 세마포어를 요청하면 커널은 세마포어의 sets를 release한다.

 

semmsl

 

set당 세마포어의 갯수. 권장값은 250이다.
그러나 만약 천개 이상의 커런트 커넥션이 DB와 연결되고 있다면 init 파라미터의 process 값은 매우 클 것이다.
그렇다면 semmsl 값도 마찬가지로 커져야 한다.
semmsl 값은 processes 파라미터 값 + 10 정도가 적절하다. 이는 현재 프로세스의 갯수와 연관이 크다.

semmni

리눅스 전체 세마포어 sets의 최대 갯수로 10.2와 11.1은 오라클에서 validate된 수치로
142 이다

 

semmns

 

OS상의 총 세마포어의 갯수를 의미한다(not 세마포어 sets). semmsl * semmni 값보다 커야하나 보통 동일하게 설정한다.
오라클은 semmns 값을 최소 32000 설정할 것을 권장한다. 이 값은 semmsl * semmni(250*128=32000)으로부터 기인한다.
만약 위에서 들었던 예의 값을 이용해 계산하면 250 * 142 = 35500

 

semopm

 

세마포어 콜당 작동할 수 있는 세마포어 작업의 최대값이다. semmsl 값과 동일하게 설정할 것을 권장한다.
오라클은 100이 10.2와 11.1 버전에 validated로 되어있다
만약 semmsi 값이 250이라면 semmsl도 250으로 한다.

 

설정예시


/etc/sysctl.conf
kernel.sem=550 78100 550 142
순서대로 semmsl, semmns, semopm, semmni 이다.

 


 

page cache tuning

 

페이지 캐쉬는 파일의 데이터나 실행 프로그램을 잡고 있는 디스크 캐시이다. 디스크 읽기를 줄이기 위해 사용한다.

swappiness

이 값은 기본값이 60
값이 높을수록 페이지캐쉬가 많아짐
값이 낮을수록 페이지캐쉬가 적어짐
그런데 hugepage를 사용할 경우 이건 필요 없음
hugepage 미사용시 only DB만을 위한 서버라면
/etc/sysctl.conf
vm.swappiness=0

 

dirty_writeback_centisecs(default 500)

 

리눅스는 pdflush 커널 쓰레드들을 통해 페이지캐시를 비워낸다. 2에서 8개의 쓰레드가 보통 시스템에서 활동한다.

/proc/sys/vm/nr_pdflush_threads 로 확인 가능
만약 모든 pdflush 쓰레드들이 최소 1초이상 바쁘다고 판단되면 pdflush 쓰레드가 추가된다.
추가된 쓰레드는 데이터를 디스크큐에 쓰게 되고 이는 혼잡이 발생하지 않는다.
pdflush 쓰레드가 1초간 활성화되지 않으면 하나씩 줄어들게 된다.

dirty_writeback_centisecs 는 얼마만큼의 간격으로 페이지캐시를 비워내는가의 수치이며 기본값이 500이다.
이 값을 낮추면 메모리가 많고 활성화된 쓰기 프로세스가 많은 경우 이점이 있다.
이 값을 낮추면 pdflush 쓰레드가 공격적으로 dirty page를 클리닝할 수 있게 한다.
결과로 한번에 비워내야할 page들의 수가 줄어들게 된다. 100(1초)보다 낮게 잡는건 무리가 있다.

vm.dirty_writeback_centisecs=100

 

dirty_expire_centisecs(default 3000=30sec)

 

만료된것으로 간주되고 반드시 다음 기회에 write되기 전까지 얼마나 오랫동안 페이지캐시에 데이터가 있을 수 있는지를 정한다.
이 값은 기본 30초로 굉장이 긴 편이다. 이것은 일반적인 상황에서 다른 pdflush 가 동작되어 디스크에 write하기까지 리눅스는
30초가 지나기 전까지 실제로 commit하지 않는다는 의미이다. 일반적인 desctop에서는 수용할만하지만 쓰기가 많은 작업에는 너무 높다.
너무 낮게 설정하지는 않으면서 낮출 필요가 있다. 너무 낮을 시에는 지속적인 dirty page를 쓰기 시도하기에 I/O 혼잡 코드가 더 빈번히
발생할 수 있다.

vm.dirty_expire_centisecs=500

 

dirty_background_ratio(default 10)

 

pdflush가 동작하여 write하기 전에 dirty page로 채워질 수 있는 활성된 메모리의 최고 비율을 말한다.
active memory 값은 meminfo로 확인할 수 있고
MemFree + Cached - Mapped 이다.
큰 메모리와 헤비한 writing 어플리케이션 환경이라면 튜닝할 필요가 있다.
리눅스가 데이터를 너무 많이 버퍼링하여 이슈가 된다. 이는 파일시스템이 시스템 call인 fsync를 통해 동기화가 필요할 시 문제가 된다.
만약 너무 많은 데이터가 버퍼캐쉬에 있는 상태에서 fsync call이 들어올 경우 시스템이 약간의 시간동안 프리징될 수 있다.
또 다른 이슈로 많은 write되어야 할 데이터가 캐쉬되어 물리적으로 쓰기 시작될 때 I/O 부하가 생긴다.
리눅스가 데이터를 너무 많이 캐쉬하지 않게 하기 위해 이 값을 줄이는 것이 효과적이다.

vm.dirty_background_ratio=3

 

dirty_ratio(default 40)

 

유저 프로세스가 dirty buffer로 쓰여지기 전에 dirty page로 채워질 수 있는 총 메모리량의 최고 비율
Maximum percentage of total memory that can be filled with dirty pages before user processes are forced to write dirty buffers
themselves during their time slice intead of being allowed to do more writes.
Note that all processes are blockes for writes when this happens, not just the one that filled the write buffers.
This can cause that is perceived as an unfair behavior where a single process can "hog" all I/O on the system.
Applications that can cope with their writes being blocked altogether might benefit from substantially decreasing this value
vm.dirty_ratio=15

 


 

memory

 

vm.min_free_kbytes

 

최소로 유지해야하는 free 메모리의 양을 결정한다.
vm.min_free_kbytes=50000

vm.highmem_is_dirtyable

 

rhel6부터 지원. 페이지 반환이 좀더 빠르게 된다.
vm.highmem_is_dirtyable=1


 

file

 

file-max

 

프로세스가 한번에 file descriptor(handler)를 열수 있는 최고치
ASM을 사용한다면 상관 없다.
10g => fs.file-max=65536
11g => fs.file-max=6553600
좀더 대규모환경이라면 327679 로 설정하는 것도 좋다.


 

network

 

오라클 RAC는 기본적으로 linux에서 interconnect를 위해 UDP를 사용한다.
리눅스 2.6 커널이상은 기본적으로 receive/send 소켓 버퍼를 자동 튜닝하지만 수치가 적어질 수 있다.

 

rmem_default

소켓 receive 버퍼 기본 크기. 오라클 권장 256kb
net.core.rmem_default=262144

 

wmem_default

소켓 send 버퍼 기본 크기. 오라클 권장 256kb
net.core.wmem_default=262144

 

rmem_max

receive 버퍼 최고치. 오라클 권장 10gr2는 2mb, 11g이상은 4mb
net.core.rmem_max=2097152
or
net.core.rmem_max=4194304

 

wmem_max

send 버퍼 최고치. 오라클 권장 256kb
10g => net.core.wmem_max=262144
11g => net.core.wmem_max=1048576

 

tcp_rmem, tcp_wmem

이들도 추가적으로 설정해야 한다. auto tuning때문에 작은 수치가 나올 수 있다.
순서대로 최소치, default, 최고치의 버퍼 크기이다.
net.ipv4.tcp_rmem=4096 262144 2097152
net.ipv4.tcp_wmem=4096 262144 262144

 

ipv4.ip_local_port_range

redhat => net.ipv4.ip_local_port_range = 1024 65000
oracle => net.ipv4.ip_local_port_range = 9000 65500

 

빠른 rac failover를 위한 설정(클라이언트측 설정이므로 서버에는 설정 불필요)

net.ipv4.tcp_keepalive_time=30(redhat권장,pro rac)   or 3000(오라클문서). 기본값 7200초
net.ipv4.tcp_keepalive_intvl=60   (redhat,pro rac) 기본값 75초
net.ipv4.tcp_keepalive_probes=9 (redhat,pro rac) 기본값도 9
net.ipv4.tcp_retries2=3 (redhat, pro rac원서) 기본값 15
net.ipv4.tcp_syn_retries=2 (redhat, pro rac) or  1(오라클문서) 기본값 5

 

기타

보안 이슈때문에 ip_forward는 0으로
net.ipv4.ip_forward = 0

역시 보안 이슈때문에 1로 설정. 아이태니엄은 기본이 1임
net.ipv4.conf.default.rp_filter = 1


 

swap

 

적정 swap size

1g~2g = 1.5 * total ram
2g~4g = 1 * total ram
4g 이상 = 4gb


 

aio

 

fs.aio-max-nr

현재 비동기 I/O 요청 갯수 제한
기본값은 65536(64k)로 오라클 디비에겐 너무 작다.
오라클은 3145728 값을 권장한다.

fs.aio-max-nr = 3145728

Posted by neo-orcl
,

https://www.centos.org/modules/newbb/viewtopic.php?topic_id=29490

centos에서 booting시 sendmail 시작 과정에서 시간을 많이 잡아먹는 경우가 있다.
이때 /etc/hosts 파일이 도메인 형식을 가지지 않아서 그렇다고 한다.

※you must fully qualified domain name(FQDN)
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch21_:_Configuring_Linux_Mail_Servers
위 링크에 나온 내용

The /etc/hosts File The /etc/hosts file also is used by DNS clients and also needs to be correctly configured. Here is a brief example of the first line you should expect to see in it:

127.0.0.1 bigboy.my-site.com localhost.localdomain localhost bigboy
The entry for 127.0.0.1 must always be followed by the fully qualified domain name (FQDN) of the server. In the case above it would be bigboy.my-site.com. Then you must have an entry for localhost and localhost.localdomain. Linux does not function properly if the 127.0.0.1 entry in /etc/hosts doesn't also include localhost and localhost.localdomain. Finally you can add any other aliases your host may have to the end of the line.


예를 들어 위 링크의 변경된 내용이다.

My current hosts file:

Quote:
# Do not remove the following line, or various programs # that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
10.3.0.1 main
10.3.0.2 alt1

Change /etc/hosts to:

127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
10.3.0.1 main.my-site.com main
10.3.0.2 alt1.my-site.com alt1

도메인은 그냥 형식적으로 아무거나 써줘도 된다. 테스트로 검증됨

아니면 sendmail 서비스를 꺼주는 방법도 생각해볼만 하다

'Knowledge > OS' 카테고리의 다른 글

RHEL 4 or 5 recommended kernel parameters  (0) 2013.08.12
find: Argument list too long 해결  (0) 2013.06.14
Linux bash profile 설정팁  (0) 2013.01.22
Linux 압축관련  (0) 2013.01.21
Hdd add on Centos 5 without rebooting  (0) 2013.01.11
Posted by neo-orcl
,

alias sys='sqlplus / as sysdba'  (띄어쓰기 없음 조심)
10g이하 기준(11g는 덤프위치가 다름)
alias alert='vi $ORACLE_BASE/admin/$OACLE_SID/bdump/alert_$ORACLE_SID.log'
alias alertf='tail -f $ORACLE_BASE/admin/$OACLE_SID/bdump/alert_$ORACLE_SID.log'
alias bdump='cd $ORACLE_BASE/admin/$OACLE_SID/bdump'
공용
alias network='cd $ORACLE_HOME/network/admin'
alias lislog='tail -400 $ORACLE_HOME/network/log/listener.log | more'
alias lislogf='tail -f $ORACLE_HOME/network/log/listener.log | more'

PS1='[\d \t ] [\w] \n[\!] '
\d : 현재 날짜    \t : 현재 시간    \w : 현재 위치한 경로    \! : 마지막으로 사용한 명령어

Posted by neo-orcl
,

Linux 압축관련

Knowledge/OS 2013. 1. 21. 09:44

####################################################################################
##### 개요
####################################################################################
리눅스에는 파일을 한개로 합치는 유틸과
파일을 압축하는 유틸이 따로 있다.
####################################################################################
##### 파일 합치기 tar
####################################################################################
파일 묶을 시
tar cvf [만들파일명] [묶을파일들]

파일 풀을 시
tar xvf [파일명]

파일을 볼 시
tar tvf [파일명]
####################################################################################
##### gzip
####################################################################################
표준 기본 압축 방법

파일 압축
gzip [파일명]

파일 압축 해제
gzip -d [파일명]

파일 정보
gzip -l [파일명]

옵션들
-d 압축해제
-r 디렉토리 지정시 디렉토리에 포함된 모든 파일 압축
-c 원본파일을 보존하고 압축
####################################################################################
##### bzip2
####################################################################################
높은 압축률, 그러나 리소스를 많이 먹고 해제시 시간 많이 걸림

파일압축
bzip2 [파일명]

압축해제
bzip2 -d [파일명]

옵션들
-k 압축이나 해제시 원본파일 보존
-v 자세한정보출력
-s 속도는 느리지만 사용메모리양을 줄임
-f 압축또는 해제시 같은 이름의 파일있으면 덮어쓰기
####################################################################################
##### TAR 와 gzip/bzip2 같이 사용하기
####################################################################################
압축
tar cvfz
tar cvfj
해제
tar xvfz
tar xvfj

z= gzip
j= bzip2

'Knowledge > OS' 카테고리의 다른 글

레드헷 시리즈 부팅시 sendmail 서비스 시작 오래걸림 현상  (0) 2013.04.29
Linux bash profile 설정팁  (0) 2013.01.22
Hdd add on Centos 5 without rebooting  (0) 2013.01.11
cpio 파일 압축풀기  (0) 2013.01.04
Link 명령어  (0) 2013.01.04
Posted by neo-orcl
,

root로 진행.
# ls /sys/class/scsi_host 
host0 

host0이 아닌 host1 이 나왔다면 아래 내용도 host0 -> host1로 변경되어야 한다.

# echo "- - -" > /sys/class/scsi_host/host0/scan

'Knowledge > OS' 카테고리의 다른 글

Linux bash profile 설정팁  (0) 2013.01.22
Linux 압축관련  (0) 2013.01.21
cpio 파일 압축풀기  (0) 2013.01.04
Link 명령어  (0) 2013.01.04
Raw device mapping on over linux contos 5.2 ver  (0) 2012.12.27
Posted by neo-orcl
,

1. /etc/sysconfig/rawdevices 설정

기존 RHEL 5.2 까지는 udev only 설정만 지원 하였으나 RHEL 5.3 이후로 /etc/sysconfig/rawdevices 설정이 다시 등장

vi /etc/sysconfig/rawdevices

/dev/raw/raw1 /dev/vg01/vol01
/dev/raw/raw2 /dev/vg01/vol02

2. /etc/udev/rules.d/60-raw.rules 설정
/etc/sysconfig/rawdevices 으로 설정된 raw devices 에 대하여 owner ship 을 부여하는 과정 입니다.
방법은 아래와 같습니다.

vi /etc/udev/rules.d/60-raw.rules

ACTION=="add", KERNEL=="raw*", OWNER=="oracle", GROUP=="dba", MODE=="0660"

3. 위의 1,2 작업을 완료 후 service 를 start

# service rawdevices start
# start_udev
# chkconfig rawdevices --level 345 on

확인

# chkconfig rawdevices --list
>> runlevel 등록 여부 확인
# raw -qa
>> raw devices 정상 등록 여부 확인
#ls -alh /dev/raw/raw*
>> 해당 raw devices 의 owner ship 확인

4. rebooting
마지막으로 rebooting 후 raw devices 정상 작동과 owner ship 을 확인

###### 출처 ######
http://blog.daum.net/oszone/41

'Knowledge > OS' 카테고리의 다른 글

Linux bash profile 설정팁  (0) 2013.01.22
Linux 압축관련  (0) 2013.01.21
Hdd add on Centos 5 without rebooting  (0) 2013.01.11
cpio 파일 압축풀기  (0) 2013.01.04
Link 명령어  (0) 2013.01.04
Posted by neo-orcl
,