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' : 모든 제한값 출력