글쓴이 글 목록: opener

[memcached] 1. 기본개념 2014-10-10

> memcached는 고성능의 분산 메모리 객체 캐싱 시스템으로 데이터베이스의 부하를 완화시켜 동적 웹어플리케이션의 속도를 향상 시킬 수 있다. 웹어플리케이션의 임시 데이터 저장용 메모리라고 할 수 있다.

>>> 장점

시스템의 사용되지 않는 일부 메모리를 활용할 수 있어 남는 자원을 효율적으로 사용해 성능을 향상 시킬 수 있다.

memcached– 초창기의 캐시 시스템은 [그림1]과 같이 각노드가 완전히 독립적으로 운영되어 데이터를 조회 또는 저장시 어느서버를 이용할지 관리되어야 하며 용량의 제한으로 인해 비생산적이며 자원 낭비적인 시스템으로 구성되었다.

– memcached는 이러한 제약사항의 해결을 위한 메커니즘을 제공 하는데 [그림2]와 같이 consistent hash 알고리즘을 사용하여 물리적인 별도의 캐시서버를 로직상 하나의 서버로 보고 사용할 수 있도록 한다. 즉, 개발자는 서버의 대수와 상관없이 한개의 객체만을 활용하여 저장 및 조회하게 되므로 능률적이고 대용량의 캐시시스템을 갖게 되므로 활용도가 넓어질 수 있다. 또한 기업의 입장에서는 오래된 저사양 서버의 남는 메모리를 활용할 수 있게되 비용면에서 효율적일 수 있다.

>>> 단점

– 재부팅시 소멸되기 때문에 영구적인 저장용 시스템으로 활용할 수는 없으며 다시 데이터가 저장되는 기간동안은 디비에서 부하를 받아내야만 한다.

– 데이터 수정 및 삭제시 데이터베이스 & memcached에 동시에 진행되어야 하므로 개발 복잡도가 증가한다.

>>> 실무에서의 활용

– 기본적인 기능만을 제공하는 캐시서버 이기 때문에 일부에서는 redis와 비교해 기능이 부족하다고 지적하지만 활용하기에 따라 많은 범위에 활용될 수 있고 충분히 대량의 트래픽을 받아낼 수 있도록 구성할 수있다.

[SERVER] 웹서비스 속도 향상을 위한 램디스크 활용 2014-10-08

> 저사양 PC로 서버를 구축할때 속도가 느리다면 개발된 소스를 메모리에 올리는 방법을 생각해 본다.

# 메모리를 사용하게 할 폴더 생성
mkdir --p /var/www_mem

# 용량을 지정하여 임시폴더로 마운트
mount -t tmpfs -o size={사용할용량:'200m'} tmpfs /var/www_mem/

# 소스복사
cp {원본폴더} /var/www_mem
>>> 고려사항
– 재부팅시 다시 마운트하고 복사 시켜주어야 한다.(스크립트로 작성하여 부팅시 자동으로 실행되도록 한다.)
– 파일업로드 경로를 메모리의 폴더가 아닌 디스크의 폴더로 지정해 주고 로딩시의 경로도 변경해주어야 한다.

[Linux 명령어] process의 thread정보 확인 2014-10-08

> 서버 개발시에는 항상 스레드의 증가에 대해 고려를 해야한다. Linux 의 ps 명령어는 스레드 관련 문제시 빠른게 원인을 찾을 수 있도록 많은 옵션을 제공한다.

>>> 조회
# case 1 : 프로세스명으로 바로 조회
ps -ALF | grep {프로세스명}
# case 2 : 프로세스 번호로 조회
ps -aux | grep {프로세스명}
ps -p {프로세스PID} -T
>>>>>> description
– ‘e’ or ‘A’ : 모든 프로세스 선택
– ‘L’ : 스레드 정보인 LWP / NLWP 출력
– ‘f’ or ‘F’ : 보여질 수 있는 모든 정보 출력
>>> 결과확인
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root      1111  1110  1111  0   10 00:05 ?        00:00:00 ./service
root      1111  1110  1112  2   10 00:05 ?        00:00:00 ./service
root      1111  1110  1113  0   10 00:05 ?        00:00:00 ./service
root      1111  1110  1114  0   10 00:05 ?        00:00:00 ./service
>>>>>> description
– PID(Process ID) : 프로세스의 아이디
– PPID(Parent Process ID) : 부모 프로세스의 아이디
– LWP(Light Weight Process, is thread) : 스레드 고유아이디
– NLWP(Number Light Weight Process) : 해당 프로세스에서 동작하는 스레드의 총 갯수
ex) 위의 예에서 1111 ID의 프로세스는 총 10개의 thread가 동작한다.
>>> 스레드 정보 확인
strace -p {스레드ID : LWP}
>>>>>> description
– 스레드가 실행하는 시스템함수를 확인 할 수 있다.