일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Backend
- 시벌이슈
- 메모
- jquery
- 코딩테스트
- 작업물
- 네이버싫어
- php artisan
- laravel
- error
- MySQL
- NGINX
- 개인공부
- centOS7
- vagrant
- linux #centos
- 작업물 #영상편집 #서브컬쳐
- 키워드
- ratchet
- AWS
- 보안
- 일상
- 키워드 정리
- centOS
- 기타정리
- 에러해결
- 복습 #회사
- 카카오가고싶다
- php
- php-fpm
- Today
- Total
개발을 간바루Joy 하게
[PHP] Ratchet WebSocket Connection limit 이슈 본문
이직 후 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 |