[문제해결] redis 시작시 에러 2015-07-07

1. 문제상황

> Linux-CentOS환경에서 Redis 서버가 시작되지 않았다.


2. 문제확인

> 로그파일(/var/log/redis/redis.log)을 확인하여 보니 다음과 같았다. 개발환경을 구축하기 위해 낮은사양의 서버에 여러 포트를 올려서 사용하였더니 기본 시스템 자원의 제한 값을 초과 한것이다.

[1016] 06 Jul 22:56:45.118 # You requested maxclients of 10032 requiring at least 10064 max file descriptors.
[1016] 06 Jul 22:56:45.123 # Redis can't set maximum open files to 10064 because of OS error: Operation not permitted.
[1016] 06 Jul 22:56:45.123 # Current maximum open files is 1024. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclie                                                  nts increase 'ulimit -n'.
* Current maximum open files is 1024. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclie                                                  nts increase 'ulimit -n'.
==> 현재 최대 열수있는 파일수는 1024이고 높게 조정하려면 ulimit -n 명령을 사용하라고 친절히 설명해 주고 있다.

3. 문제해결

> ‘ulimit’ 명령으로 시스템 자원의 제한 값을 확인하고 변경할 수 있다.

제한 값 확인
[root@redis]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14806
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14806
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
제한 값 변경
ulimit -n 32768
실행 로그 확인
cd                 _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 2.8.13 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6201
 |    `-._   `._    /     _.-'    |     PID: 29333
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[29333] 07 Jul 13:18:18.240 # Server started, Redis version 2.8.13
[29333] 07 Jul 13:18:18.258 * DB loaded from disk: 0.017 seconds
[29333] 07 Jul 13:18:18.258 * The server is now ready to accept connections on p
* '-c' : core file의 최대크기
* '-d' : 프로세스 data segment의 최대크기
* '-p' : pipe 버퍼의 크기
* '-s' : stack의 최대크기
* '-n' : open 가능한 파일의 개수
* '-f' : 쉘에서 생성하는 파일의 최대크기
* '-t' : 할당받을 수 있는 cpu time
* '-v' : 프로세스가 할당 받을 수 있는 가상메모리의 크기
* '-t' : 할당받을 수 있는 cpu time
* '-a' : 모든 제한값 출력

[nGrinder] 2-3. Monitor 설치 2015-05-07

Agent 설치와 동일하게 [2-1. Controller]에서 설치한 컨트롤러 서버로 부터 설치 파일을 다운로드 받아 압축을 풀고 실행한다. 별다른 설정은 필요없다.

 

 1. 다운로드 및 압축해제
cd /usr/local/src
wget http://{Controller Host}/monitor/download
mv download monitor.tar.gz
tar xvf monitor.tar.gz
ngrinder-monitor 폴더가 생성된다.

 

 2. 생성된 폴더를 적당한 위치에 옮기고 monitor를 실행
mv ngrinder-monitor ../
cd /usr/local/ngrinder-monitor
./run_monitor.sh or ./run_monitor_bg.sh
백그라운드로 실행(run_monitor_bg.sh)하지 않고 로그를 실시간으로 확인하기 위해서는 run_monitor.sh를 실행한다.

 

[nGrinder] 2-2. Agent 설치 2015-05-07

[2-1. Controller]에서 설치한 컨트롤러 서버로 부터 설치 파일을 다운로드 받아 압축을 풀고 실행한다. 별다른 설정 필요없이 자동으로 컨트롤러 서버에 연결된다.

 

 1. 다운로드 및 압축해제
cd /usr/local/src
wget http://{Controller Host}/agent/download
mv download agent.tar.gz
tar xvf agent.tar.gz
ngrinder-agent 폴더가 생성된다.

 

 2. 생성된 폴더를 적당한 위치에 옮기고 agent를 실행
mv ngrinder-agent ../
cd /usr/local/ngrinder-agent
./run_agent.sh or ./run_agent_bg.sh
백그라운드로 실행(run_agent_bg.sh)하지 않고 로그를 실시간으로 확인하기 위해서는 run_agent.sh를 실행한다.

 

 3. 많은 쓰레드를 실행할 수 있도록 설정을 변경한다.

ngrinder_agent2

# 확인
ulimit -a
# 설정
vi /etc/security/limits.conf
ulimit -a에서 확인한 값중 max user processes와 open files 두값이 10000이하일 경우 /etc/security/limits.conf 파일을 다음과 같이 수정
 ※ 다른계정으로 실행되기를 원한다면 root 대신 다른계정을 입력
root          soft          nproc          32768
root          hard          nproc          32768
root          soft          nofile         16000
root          hard          nofile         16000

 

 4. 컨트롤러의 Agent Management 메뉴에서 접속 되었음을 확인

ngrinder_agent