개발을 간바루Joy 하게

[PHP] Ratchet WebSocket Connection limit 이슈 본문

프로그래밍/PHP

[PHP] Ratchet WebSocket Connection limit 이슈

New! Game 2021. 9. 9. 19:16

이직 후 php웹소켓을 사용하여 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 libevent libevent-dev

 

후에 확장프로그램을 설치합니다.

pecl install ev
pecl install event #해당 프로그램 다운시 Include libevent OpenSSL support [yes] 부분에서 no 입력

 

this pear command is not at your .. 어쩌구 에러가 발생하는 경우가 있습니다(캡처 까먹음)

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

#root 계정이 아닐때
echo "extension=ev.so" | sudo tee -a /etc/php.d/ev.ini
echo "extension=event.so" | sudo tee -a /etc/php.d/event.ini

 

적용 되었는지 확인

php -m |grep event
php -m |grep ev

 

 

적용후 다시 테스트를 하면 제한이 풀린걸 확인 하실 수 있습니다.

 

 

 

#추가이슈

 

위 사진처럼 C 컴파일러가 없어서 에러가 발생하는 경우도 있습니다 gcc 컴파일러를 설치해주면

간단하게 해결됩니다.

yum -y install gcc

 

'프로그래밍 > PHP' 카테고리의 다른 글

[PHP] Socket Server Code  (0) 2021.10.19
[PHP] Ratchet Websocket 설치 및 사용방법  (0) 2021.09.15
[PHP] 엑셀 csv 파일 가공  (0) 2021.05.04
DeZend (PHP디코딩) 사용방법  (0) 2021.04.14
php 문자열 변환 암호화  (0) 2021.04.07