메뉴 건너뛰기

조회 수 5530 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
1. 개요

  최근에 Nginx 와 fastCGI모드로 설치한 PHP가 성능이 뛰어나다는 얘기가 있다. Nginx를 최적으로 설치하고 설치 한 뒤에는 얼마만큼 뛰어난지 조사해 보는 것이 본 내용이다. 
 Nginx는 웹서버이다. Nginx는 성능이 아주 뛰어나고, 현재(2011.04) 전 세계 약 7.5% 정도 사용하고 있는 것으로 알려져있다. Nginx는 아직 베타 버전이지만, 성능이 뛰어나고 가벼운 웹 데몬이라고 한다.

 (내용 작성을 완료한 시점에 1.0.0이 나왔다.- 4월 12일)

 그리고 PHP를 fastCGI모드로 컴파일 하여 WAS처럼 작동하게 한다. Nginx와 PHP는 모듈 연결이 아닌, TCP/IP를 사용한 네트웍 연결을 구성한다. 이렇게 하게되면 웹서버와 WAS(PHP서버)를 분리 할 수 있다. 대형 시스템에서는 고려해 볼만한 구조이다.

 Nginx를 웹서버로 사용하면 많은 이점이 있다. 그렇지만, 여러가지 이점이 국내에서 가장 많이 사용해 왔고, 사용하고 있어 익숙한 Apache를 대체할 만한 웹서버인지는 의문이다. 필자의 생각은 성능이 중요하지만, 안정성 및 유지보수성도 아주 중요하다고 생각한다. 

  본 내용은 Nginx를 설치한다. 그리고 기본 설정을 하고, 마지막으로 성능테스트를 할 것이다.



2. 프로그램 설치

 ( 본 내용는 SULinux 2.0 32Bit을 기반으로 작성한다. )


  2.1. apmtools로 최신버전의 APM 설치

  설치된 프로그램 중, MySQL만을 사용할 것이며, 확장성을 위하여 Apache, PHP는 설치만 하고 사용하지는 않는다. (본 내용은 성능 시험을 위해 사용할 것이다. )

  apmtools

  위 명령어 입력 후 최신 버전을 설치 한다. 
  (참고, 본 내용 사용 버전 : Apache 2.2.16, PHP 5.2.14, MySQL 5.1.51 )

  APM이 설치되었다면, 아래 명령어로 서비스를 중지 시키고 부팅시 시작되지 않게 설정한다. 

  service httpd stop
  chkconfig httpd off




2.2 Libevent 설치 

  php fpm은 event를 사용한다. 최신버전의 라이브러리를 설치해 주어야 한다. 정상 설치 되기 때문에 다음과 같이 설치 한다. 
  참조 URL : http://monkey.org/~provos/libevent/

 프로그램 소스는 /usr/local/src에 저장한다. 그리고 컴파일 등의 작업을 진행한다. 특별이 용량이 부족하지 않다면, 프로그램은 남겨두는 것이 좋다. 

 다음 과정은 프로그램을 다운로드 한 후 압축 해제, 설정, 컴파일, 설치 등의 과정이다.

    cd /usr/local/src
    wget http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz
    tar xvfpz libevent-2.0.10-stable.tar.gz
    cd libevent-2.0.10-stable
    ./configure
    make -j 4 && make install
    cd ../





2.3. PHP 다운로드 및 PHP FPM 패치 설치

  PHP를 fastCGI 모드로 작동시키기 위해서는 php-fpm 패치를 해야 한다. 다음과 같은 과정으로 패치 한다.

  (주의) PHP 5.3.X와 5.2.X 설치법이 다르니 주의 하고, 다른 버전을 설치 해야 한다면, (http://php-fpm.org/wiki/Documentation) 참조하기 바란다.
 
 본 내용에서는 활발하게 개발되고 있는 5.2.X를 선택하여 설치한다.



 cd /usr/local/src
 # PHP 다운로드
wget http://www.php.net/get/php-5.2.17.tar.bz2/from/kr.php.net/mirror  

 # PHP 압축 해제
 tar xvfpj php-5.2.17.tar.bz2

 # PHP-FPM 다운로드
 wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
 # PHP-FPM 압축해제
 gzip -d 
php-5.2.17-fpm-0.5.14.diff.gz
 # PHP-FPM 패치  
 cd php-5.2.17
 patch -p1 < ../
php-5.2.17-fpm-0.5.14.diff

 # PHP Configure 과정 ( Apmtools와 동일한 옵션 )    
   ./configure --prefix=/usr/local/php_5.2.17-fpm --enable-fpm --enable-fastcgi\
  --with-curl --with-xpm-dir=/usr \
  --with-mcrypt --with-zlib --with-gd --with-ttf --with-png --with-expat-dir=/usr \
  --with-gmp --with-xml --with-language=korean --with-charset=euc_kr \
  --disable-debug --disable-rpath --with-iconv --enable-safe-mode \
  --enable-magic-quotes --enable-bcmath --enable-dio \
  --enable-gd-native-ttf --enable-sysvsem --enable-sysvshm --enable-wddx \
  --enable-pic --enable-inline-optimization --enable-mbstring \
  --enable-mbregex --enable-mbstr-enc-trans --with-config-file- \
  --enable-ftp --disable-debug --enable-track-vars=yes --with-jpeg-dir \
  --with-freetype-dir --enable-gd-native-ttf \
  --enable-dl --enable-gd-imgstrttf --enable-exif --with-openssl --with-fpm \
  --with-libevent=/usr/local/lib --with-xml2 \
  --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config

 # PHP 컴파일
 make -j 4
 # PHP 설치
 make install
 


## 부팅시 자동시작을 위해 스크립트 수정
#  파일명 : /usr/local/php_5.2.17-fpm/sbin/php-fpm 
# 파일의 윗 부분에 다음 내용 추가
---------------- 다음 -----------------------------
# php - this script starts and stops the php-fpm daemon
#
# chkconfig:   - 85 15 
# description:  php cgi


ln -s /usr/local/php_5.2.17-fpm/sbin/php-fpm  /etc/init.d/
chkconfig --add php-fpm
chkconfig php-fpm on






  2.4 Nginx 설치

  Nginx는 웹서버이다. 다음과 같은 같이 설치 한다.


     VERSION_NGINX=0.8.45
     cd /usr/local/src 

     wget http://sysoev.ru/nginx/nginx-${
VERSION_NGINX}.tar.gz
     tar xvfpz nginx-
${VERSION_NGINX}.tar.gz
     cd nginx-
${VERSION_NGINX}


    ./configure --pid-path=/usr/local/nginx/logs/nginx.pid \
      --sbin-path=/usr/local/sbin/nginx \

      --with-md5=/usr/lib --with-sha1=/usr/lib --with-http_ssl_module \
      --with-http_dav_module \

      --without-mail_pop3_module --without-mail_imap_module \
      --without-mail_smtp_module    


    make -j 4
    make install
 


Nginx 시작 스크립트 다운로드 및 설정, 자동시작 등록

wget 'http://wiki.nginx.org/index.php?title=RedHatNginxInitScript&action=raw&anchor=nginx' -O nginx 
 mv nginx /etc/init.d/
 chmod 755 /etc/init.d/nginx
 chkconfig --add nginx
 chkconfig nginx on


Nginx 시작 스크립트(/etc/init.d/nginx)의 일부를 다음과 같이 변경한다.

   ## 23줄 수정
   nginx="/usr/local/sbin/nginx"
   ## 26줄 수정
   NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"



3. 프로그램 설정 및 튜닝

  3.1 PHP-FPM 설정파일 튜닝

  PHP-FPM설치 후 기본 값을 사용하면, 성능이 제대로 나오지 않는다. 그래서 다음과 같이 설정파일(/usr/local/php_5.2.17-fpm/etc/php-fpm.conf)을 사용하여 튜닝 한다.

 ## 63줄 수정
    <value name="user">nobody</value>
 ## 66줄 수정
    <value name="group">nobody</value>

 ## 82줄 수정
    <value name="max_children">2048</value>
 ## 116줄 수정
    <value name="rlimit_files">102400</value>



3.2. Nginx와 PHP 연결 설정

  다음과 같이 php확장자를 가진 프로그램을 PHP-FPM이 실행 할 수 있게 설정한다.
  설정파일 (/usr/local/nginx/conf/nginx.conf)편집

 ## 3줄 수정 
 # MaxClient  = worker_processes * worker_connections 라고 하는데,
    worker_processes  5;

## 약 16줄에 다음과 같이 추가 (리눅스에서 성능이 좋아진단다.)
events {
    worker_connections  1024;
}

## 약 29라인 다음과 같이 변경 (리눅스에서 성능이 좋아진단다.)
    sendfile        on;

 ## 65줄 주석 해제 및 설정 
       location ~ \.php$ {
           root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  scRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
             include        fastcgi_params;
       }




4. 프로그램 시작 
  
  php, Nginx 모두 데몬 형태로 시작되어야 한다. 다음과 같이 시작 시킨다.
(주의! 꼭 아래와 같이 ulimit로 file open limit를 늘려준다!.)

echo "ulimit -n 10240" >> /root/.bash_profile
source /root/.bash_profile

  service nginx start
  service php-fpm start




5. 프로그램 성능 테스트

 Nginx를 설치 한 이유는 Apache보다 성능이 우수하다고 해서이다. 여기에서는 앞에서 설치한 Nginx 서버와 SULinux 2.0 의 APM_Install-tools로 설치된 Apache+PHP를 대상으로 성능 시험 해 보았다.


 5.1. 시험 환경 ( 하드웨어 ) 
   제조사 :  HP
   모델    :  HP530
   CPU    :  Intel Core2Duo T5200 (1.6GHz, FSB:533MHz, L2: 2M)
   RAM   :  2G (DDR2, 667MHz, 1G*2)
   Disk    : 160G (SATA, 5400RPM)
   네트워크  : 100M (Intel PRO 100 VE)
   메인보드  : Mobile Intel 940GML Express



 5.2. 시험 명령어

  ab -n 100000 -c 100 192.168.0.183/test2.php

   위 내용은 100개의 쓰레드를 사용하여 100,000의 연결을 시도한다.




 5.3. 시험 PHP 프로그램 

## test1.php (곱셈 테스트)
<? 
   for($i=1;$i<=100;$i++){ 
        echo "$i"; 
        $mult*=$i;
   }
?>






## test2.php ( 배열, 연산 테스트)
<?
  $str=array();
  for($i=1;$i<=100;$i++){
     $str2+=$i%3;
     $str[$i]=$str2;
   }
   echo "ok";
?>




5.4. 시험 결과



Nginx
Apache
test1.php
3121.703775.65
test2.php
3166.623760.82


 위 결과는 동일한 HW에서 Nginx와 Apache의 성능을 비교하였다. 위 값은 초당 처리되는 연결을 의미하며, SULinux 2.0 에서 제공되는 Apache가 훨씬 많은 접속을 처리 할 수 있었다. ( 위 결과는 10회 시험 결과 평균을 낸 것 임 )



6. 마치며
  
  제가 작성한 글이 많은 사람에게 도움이 되었으면 하는 바램입니다. 본 내용의 성능시험 결과는 시험 환경에 따라 다르니 혹시 다른 결과가 나오거나 본 내용에 대한 지적 사항이 있다면 댓글에 남겨주시기 바랍니다.


List of Articles
번호 제목 날짜 조회 수
236 centos 7 APM 최신버전 설치 ( mariadb 10.4 / apache 2.4.39 / php 7.3.8 ) file 2024.02.07 44
235 작업 예약 스케줄러(크론Cron)파일,자동 백업 명령 file 2023.01.12 129
234 root 계정 su 명령 제한 file 2023.01.20 136
233 기본 허가권,퍼미션 지정(제어, 설정)하기(umask와 작동 원리) file 2023.01.12 142
232 우분투 작업 스케줄러 Crontab 사용법, 디버깅, 주의 사항 2023.01.12 148
231 다중명령어(세미콜론(;), 파이프pipe(|), 더블 엔퍼센트 &&, ||)의미,사용법과 차이점 file 2023.01.12 152
230 find 명령어 2021.03.26 162
229 재지향시 유의사항 (grep 재지향) 2021.03.26 174
228 centos 시작시 네트워크 모듈 추가 2021.03.26 207
227 netstat 명령어 2021.03.26 210
226 crontab 사용법 2021.03.26 246
225 리눅스 vsftpd 500 OOPS 에러 (CENTOS 7) file 2020.03.04 298
224 CentOS ImageMagick 설치 php 연동 file 2021.03.26 312
223 명령어 모음 file 2021.03.26 373
222 tar.gz 파일 묶기, 압축하기, 압축 풀기 2021.03.26 394
221 centos7 sendmail 설치 및 세팅 2020.12.31 463
220 apache2 트래픽 모듈 mod_cband 사용법 2019.02.14 1129
219 이미지 및 파일 무단링크 방지책 2019.02.14 1137
218 php_screw를 이용한 php 소스 암호화 하기 2019.02.14 1420
217 Apache 동시접속자수 확인 2019.02.14 1925
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 12 Next
/ 12

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved