웹 서비스를 운영하다보면, 압축,rsync 때문에 웹 서비스에 영향을 줄 수 있다.
따라서, 이런 경우에 대해서 적절하게 cpu 사용량을 정할 수 있는 툴이 있다!!!

cpu limit 이라는 툴인데. 소스 하나, make 파일 하나밖에 없다.
다운로드는 여기서한다. (홈페이지 http://cpulimit.sourceforge.net/)

wget http://downloads.sourceforge.net/project/cpulimit/cpulimit/cpulimit/cpulimit-1.1.tar.gz?r=&ts=1301401588&use_mirror=cdnetworks-kr-1

make 하면, cpulimit 이라는 파일이 생성된다.


파일 내부를 보면, 아주 간단하다. /proc 파일을 모니터링하고, SIGSTOP, SIGCONT만 이용해서 만든 간단함!!!! 깜짝 놀랬다.  (역시 도전하는 사람은 아름다워~)
goto문 쓰는 황당한 소스이다. 나중에 내가 예쁘게 고쳐봐야겠다~


사용법은 pid 별로, 명령어별로 다 가능하다고 하는데. 명령어단위로는 잘 못찾는 것 같다. 대신 pid를 넣으면 잘 동작한다..



cpu를 겁나게 많이 쓰는 것을 하나 만든다.
gzip -9 </dev/zero >/dev/null  &
978

그리고, pid가 978인거 확인하고, cpulimit을 돌린다.
cpulimit -p 978 -l 10 &


추세를 확인해본다..
바로 내려가는게 아니라, 천천히 내려간다. 좋은 발견임~^^


[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9           100   847   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          96.3   899   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          71.1   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          61.4   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          59.5   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          57.8   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          56.0   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          36.4   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          35.6   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          33.6   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          31.0   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          24.3   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          19.1   978   0
[root@cpulimit-1.1]# ps -C gzip o cmd,%cpu,pid,ni
CMD              %CPU   PID  NI
gzip -9          17.5   978   0


Posted by '김용환'
,

쉘# getconf -a | grep libc
GNU_LIBC_VERSION                   glibc 2.3.4
Posted by '김용환'
,

리눅스 시간 동기

c or linux 2011. 2. 14. 14:23

 
예전에는 리눅스 서버의 동기화를 아래와 같이 crontab에 등록해서 사용했다.
/usr/bin/rdate -s  시간서버

최근에는 ntpd 데몬을 이용해서 시간정보를 맞춘다.
http://www.cyberciti.biz/faq/linux-how-do-i-configure-xinetd-service/


수동으로 시간정보 수정할려면 ntpdate (rdate) 명령어를 이용하면 됨..
Posted by '김용환'
,


* 아파치 정보

설치 디렉토리/bin]# httpd -v
Server version: Apache/2.2.13 (Unix)
Server built:   Dec 10 2009 01:29:37


* 톰캣 정보

톰캣설치디렉토리/bin]# ./version.sh  또는  ./catalina.sh version
Using CATALINA_BASE:   /usr/local/tomcat/lucy_8080
Using CATALINA_HOME:   /usr/local/tomcat/lucy_8080
Using CATALINA_TMPDIR: /usr/local/tomcat/lucy_8080/temp
Using CATALINA_LOGDIR: /home/www/backup/tomcatlog
Using JRE_HOME:       /usr/local/jdk6
Server version: Apache Tomcat/5.5.17
Server built:   Apr 14 2006 02:08:29
Server number:  5.5.17.0
OS Name:        Linux
OS Version:     2.6.9-78.ELsmp
Architecture:   i386
JVM Version:    1.6.0_13-b03
JVM Vendor:     Sun Microsystems Inc.

(이거 말고 다르게 보는 방법)
cat RELEASE-NOTES 
$Id: RELEASE-NOTES 351503 2005-12-01 22:12:48Z keith $
Tomcat 5.5 is designed to run on J2SE 5.0 and later, and requires

마이너 버젼까 확인하기 위해서는.. jar 를 풀어서.. properties를 보면 확인이 가능합니다.
jar xf /server/lib/catalina.jar  org/apache/catalina/util/ServerInfo.properties

grep -r 'number' org/apache/catalina/util/ServerInfo.properties
./org/apache/catalina/util/ServerInfo.properties:server.number=5.5.17.0





* 자바 정보

자바설치디렉토리/bin]# ./java -version
java version "1.5.0_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) Server VM (build 1.5.0_08-b03, mixed mode)

(참고로 자바에서는 properties가 아닌 클래스로 정의하였다.
sun.misc.Version 클래스에서 private 클래스 필드로 version 정보를 등록한다.)


* 리눅스
cat /etc/redhat-release
CentOS release 4.7 (Final)

cat /proc/version
Linux version 2.6.9-78.ELsmp (mockbuild@builder16.centos.org) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)) #1 SMP Fri Jul 25 00:04:28 EDT 2008


*mod_jk

strings apache/modules/mod_jk.so | grep mod_jk/
mod_jk/1.2.31 (1026297)
mod_jk/1.2.31

'c or linux' 카테고리의 다른 글

glibc 버젼 확인하기  (0) 2011.02.22
리눅스 시간 동기  (0) 2011.02.14
Missing libstdc++.so.5  (0) 2011.01.07
파일 시스템 관련  (0) 2011.01.05
리눅스 커널 시간 이해하기  (0) 2010.11.03
Posted by '김용환'
,
Posted by '김용환'
,


파일 시스템을 확인한다.

df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sdwq
              ext3    457G  131G  326G  29% /
none         tmpfs    2.0G     0  2.0G   0% /dev/shm



EXT3 에서는 한 디렉토리 안에서 31998개까지만 포함 할 수 있다.

http://en.wikipedia.org/wiki/Ext3

'c or linux' 카테고리의 다른 글

리눅스 버전 정보 확인 (아파치 버젼, 톰캣 버젼, 자바 버젼, 리눅스 버전)  (0) 2011.01.13
Missing libstdc++.so.5  (0) 2011.01.07
리눅스 커널 시간 이해하기  (0) 2010.11.03
tid 정보 보기  (0) 2010.10.27
SIGSEGV  (0) 2010.10.25
Posted by '김용환'
,


리눅스 커널 시간 보정
http://www.hanb.co.kr/network/view.html?bi_id=1443

커널에서 시간 측정하는 법
http://kldp.org/node/74881

리눅스에서의 시간 측정 정밀도
http://kldp.org/node/2080

프로세스(쓰레드)별 cpu 시간 측정
http://kldp.org/node/116765

'c or linux' 카테고리의 다른 글

Missing libstdc++.so.5  (0) 2011.01.07
파일 시스템 관련  (0) 2011.01.05
tid 정보 보기  (0) 2010.10.27
SIGSEGV  (0) 2010.10.25
RTP 이용한 솔루션  (0) 2010.10.22
Posted by '김용환'
,

tid 정보 보기

c or linux 2010. 10. 27. 02:28

현재 동작하고 있는 thread 정보를 보는 tid 정보 보기

syscall(__NR_gettid);

예제
http://cdcsman.tistory.com/tag/getpid



'c or linux' 카테고리의 다른 글

파일 시스템 관련  (0) 2011.01.05
리눅스 커널 시간 이해하기  (0) 2010.11.03
SIGSEGV  (0) 2010.10.25
RTP 이용한 솔루션  (0) 2010.10.22
간단 socket 연결 예제  (0) 2010.10.21
Posted by '김용환'
,

SIGSEGV

c or linux 2010. 10. 25. 14:53


요즘에 jvm 이 killed 되고 있는데. jvm 버그의 영향이 있다. SIGSEGV 때문이다.


 http://database.sarang.net/study/glibc/21.htm


매크로 : int SIGSEGV

이 시그널은 할당된 메모리의 범위를 벗어나는곳에서 읽거나, 쓰기를 시도할 때 발생 된다. ( 실제로, 그 시그널들은 프로그램이 충분한 영역을 할당받지 못할 때 시스템 메모리 보호 메커니즘에 의해서 발생한다. ) 그 이름은 "segmentation violation"의 약자이다. SIGSEGV 상황이 발생되는 가장 일반적인 방법은 비참조 되는 널( defeferencing a null) 이나 초기화되지 않은 포인터에 의한 것이다. 널 포인터는 주소 0으로 참조되고, 대부분의 운영체제는 이 주소가 정확하게 유용하지 않음을 확실히 하기 때문에 비참조 널 포인터는 SIGSEGV가 발생될 것이다. (어떤 운영체제는 주소가 0인 메모리도 유용하고, 비참조 널 포인터는 그들 시스템상에서는 시그널을 발생하지 않는다. ) 비초기화된 포인터에서는, 유용하지 않거나, 유용하더라도 임의의 주소들을 갖게된다. SIGSEGV 상황이 얻어지는 다른 일반적 방법은 배열에 포인터를 사용했을 때 그 배열의 끝을 체크하기를 실패했을 때이다.


 

SEGV는 Segmentation Violation으로 메모리 침범으로 어플이 죽을 때 발생된다.
참고로  서로의 쓰레드가 독립적입을 보장받기 위해서 서로다른 영역을 참조하든지 혹은 쓰레드에 대해서 메모리 동기화를 하지 않을 때 SIGSEGV가 발생된다.

'c or linux' 카테고리의 다른 글

리눅스 커널 시간 이해하기  (0) 2010.11.03
tid 정보 보기  (0) 2010.10.27
RTP 이용한 솔루션  (0) 2010.10.22
간단 socket 연결 예제  (0) 2010.10.21
__LINE__, __FILE__, __func__  (0) 2010.10.21
Posted by '김용환'
,

RTP 이용한 솔루션

c or linux 2010. 10. 22. 13:59

linphone 이라는 것이 있음
소스가 오픈되어서 확인하면 됨


'c or linux' 카테고리의 다른 글

tid 정보 보기  (0) 2010.10.27
SIGSEGV  (0) 2010.10.25
간단 socket 연결 예제  (0) 2010.10.21
__LINE__, __FILE__, __func__  (0) 2010.10.21
priority inversion & inheritance  (0) 2010.10.21
Posted by '김용환'
,