on
Ratchet WebSocket Connection limit 이슈
Ratchet WebSocket Connection limit 이슈
이직 후 php웹소켓을 사용하여(이걸 왜 php로 하려고하는지 이해x) c#프로그램과 통신하는 작업을 하게되었는데,
스트레스 테스트 도중 connection이 1020이상으로 접속이 되면
cpu사용량이 급증하면서 접속이 안되는 이슈가 있었습니다.
왜 안되는지 하루반나절 고생한 결과.. Centos자체의 접속제한과 EventLoop(stream_select)에 관한 이슈였습니다.
다음에도 이런 작업을 하게 될때 두번 삽질하지 않기 위해 해결방법을 적습니다.
php7.4(php8에서 또 이슈나서 다운그레이드함...) , Centos7, Nginx 환경에서 작업했습니다.
우선 Centos에 제한을 풀어줍시다.
에디터 /etc/security/limits.conf
해당 파일을 열면 어려운 글자들이 촤르륵 나오는데... 신경 쓸 필요없이 맨밑으로 내립시다.
빨간색 동그라미 친 부분이 입력해야될 부분입니다.
간단하게 설명하자면
domain : 제안할 대상 (*, user명, 그룹명(앞에@ 붙음)을 줄수있습니다.)
type : 강하게 제한할것인지 어느정도 여유를 줄 강도를 결졍합니다.
soft : soft로 설정한 용량을 넘어가면 "경고" 메세지를 남깁니다.
hard : 어떠한 일이 있어도 hard를 넘길 수 없다는 의미입니다.
item : 제한할 항목으로 core,data,seg,file size 등 여러가지가있습니다. (자세한선 구글신에게)
nproc : 최대 프로세스의 갯수(KB)
stack : 최대 스택 사이즈(KB)
nofile : 한번에 열 수 있는 최대 파일 수
core : core파일의 사이즈(KB)
value : 제한 하고자 하는 설정 값
* hard nofile 500000 * soft nofile 500000 root hard nofile 500000 root soft nofile 500000
해당값을 입력해도되고 본인 마음대로 수치값과 사용자를 지정하여 변경 가능합니다.
입력을 마치고 저장하셨다면 해당 명령어를 입력해 적용이 되었는지 확인합니다.
ulimit -Ha : 하드설정 전체보기 ulimit -Sa : 소프트설정 전체보기 ulimit -a : ulimit설정 전체보기
해당설정을 마쳤다면 php-fpm파일을 열어줍니다.
에디터 /etc/php-fpm.conf
파일을 열으셨다면 rlimit_files 를 찾아 주석을 풀고 값을 변경해줍니다.
php-fpm 재시작
systemctl restart php-fpm
이정도면 Centos7 기본 제한값은 풀렸습니다.
이렇게 설정하시고 안되신다면 해당 링크를 참고해주시길 바랍니다.
https://rtcamp.com/tutorials/linux/increase-open-files-limit/
다음은 I/O 이벤트 핸들러(stream_select) 확장 프로그램을 설치해주어야합니다.
우선 libevent-dev 를 설치합니다.
yum install php7.4-dev libevent-dev
후에 확장프로그램을 설치합니다.
pecl install ev pecl install event #해당 프로그램 다운시 Include libevent OpenSSL support [yes] 부분에서 no 입력
pecl 명령어가 안먹히는 이슈가 발생할 수 있습니다.
그때는 php-pear 를 설치를 해줍니다.
yum install php-pear
php.ini 모듈에 적용시켜줍니다
echo "extension=ev.so" > /etc/php.d/ev.ini echo "extension=event.so" > /etc/php.d/event.ini
적용 되었는지 확인
php -m |grep event php -m |grep ev
적용후 다시 테스트를 하면 제한이 풀린걸 확인 하실 수 있습니다.
from http://ganbarujoy.tistory.com/149 by ccl(A) rewrite - 2021-09-09 19:26:46