Web/Apache2013. 11. 25. 14:13

Apache 에는 2가지의 MPM(Multi Processing Module : 다중 처리 모듈)방식이 있습니다.

 

바로 prefork 와 worker 방식입니다.

 

prefork 는 apache2 설치시 기본으로 적용되는 방식이고, worker 는 옵션을 주어 설치를 할 수 있습니다.

(yum 과 같이 rpm 으로 설치한 경우 /etc/sysconfig/httpd 파일에서 #HTTPD=/usr/sbin/httpd.worker 부분의 #(주석) 를 제거하여 아파치(Apache)를 재시작 합니다.)

 

예) Apache 2.2.20 컴파일시

prefork : 별도의 옵션을 입력 안해도 됩니다.

.⁄configure --prefix=⁄usr⁄local⁄apache --enable-rule=SHARED_CORE --enable-module=so --enable-shared=max --enable-so  --enable-ssl  --enable-modules=ssl  --enable-rewrite=shared --enable-unique-id 

 

 

worker : --with-mpm=worker 옵션을 추가하여 configuer 합니다.

.⁄configure --prefix=⁄usr⁄local⁄apache --enable-rule=SHARED_CORE --enable-module=so --enable-shared=max --enable-so  --enable-ssl  --enable-modules=ssl  --enable-rewrite=shared --enable-unique-id --with-mpm=worker

 

웹서버의 용도에 따라 이 MPM 방식이 중요합니다. 각 방식별로 특징이 다르기 때문이지요.

 

prefork

 

prefork 방식은 쓰레드가 한개의 자식 프로세스를 여러개 사용하며 각 프로세스는 한 번에 한 연결을 담당합니다.

또한 실행중인 프로세스를 메모리 영역까지 복제하여 실행하기에 당연히 프로세스가 소비하는 메모리가 많습니다.

(특정 자식프로세스가 메모리를 많이 잡아먹어 Apache프로세스가 Swap 영역까지 사용하여 시스템이 다운되는 현상을 경험했었습니다..ㅜㅜ)

하지만 메모리를 직접 공유하지 않고 독립적인 메모리를 할당하기에 안정적 이라고 할 수 있습니다.

메모리 소비가 많은 대신 응답 프로세스를 미리 띄어 놓고 클라이언트가 요청을 하면 자식 프로세스가 응답을 합니다.

 

 

worker

 

worker방식은 한 자식프로세스 당 여러개의 쓰레드(thread)를 사용합니다. 이 쓰레드는 최대 64개까지 사용할 수 있으며, 지정된 만큼의 프로세스와 각 쓰레드를 준비하여 클라이언트 요청을 받아 들입니다. 또한 쓰레드간에 메모리를 서로 공유하기 때문에 prefork 방식보다 메모리 소비가 적습니다.

동시접속자 수가 많거나 다중 CPU 환경에 적합합니다. 메모리를 공유해서 인지 하나의 쓰레드에서 문제가 발생하면 해당 쓰레드에

Acess 하여 작업중인 모든 프로세스에 문제가 발생한다고 하지만 아직까지 경험해보지는 못했습니다.

이게 진정 단점인지 모르겠지만 일부 OS(예:우분투)의 최신버전에서는 apache 를 자동설치시 기본으로 worker 방식으로 설치가 됩니다.

 

※ 각 방식별로 소스컴파일시 최대 접속자 수를 조정하여 설치할 수 있습니다.

 

각 방식 별로 해당 옵션의 설정값을 확인해 보겠습니다.

 

먼저 prefork 부터 확인해보겠습니다.

<IfModule mpm_prefork_module>
    StartServers         10
    MinSpareServers      15
    MaxSpareServers      25
    MaxClients         1024
    MaxRequestsPerChild   0
<⁄IfModule>

 

StartServer

 - 아파치(Apache) Start 시 생성되는 자식프로세스의 갯수를 지정

 

MinSpareServers

 - 아파치(Apache)가 유지할 최소 자식프로세스수

 

MaxSpareServers

 - 아파치(Apache)가 유지할 최대 자식프로세스수

 

MaxClients

 - 아파치(Apache) Start시 최대 생성 가능한 자식 프로세스의 갯수

   (보통 이 옵션을 가지고 최대 접속자수를 지정합니다.)

 

MaxReqeustPerChild

 - 클라이언트들의 최대 요청갯수, 기본값은 0 이며, 무한대입니다. 이 갯수만큼 클라이언트로부터 요청을 받았다면 자식 프로세스는 자동으로 죽고

   다시 생성 됩니다. 아파치(Apache)서버가 자주 다운되거나 메모리 문제가 발생한다면 이 값을 조절하여 해결을 봅니다.

 

※ MinSpareServers, MaxSpareServers 값은 절대적인 수치가 아닙니다. 서버의 상태나 접속하는 Client에 따라 늘어나거나 줄어들 수 있습니다.

    다만, MinSpareServers, MaxSpareServers 값이 높아서 기본 프로세스가 많다면 갑자기 늘어나는 Client접속자수 나 서버의 급격스러운 부하에

    아파치서버의 빠른 대처가 가능합니다.

 

자 다음은 worker 입니다.

<IfModule mpm_worker_module>
    StartServers         16
    MaxClients         2048
    MinSpareThreads     256
    MaxSpareThreads    1024
    ThreadsPerChild      64
    MaxRequestsPerChild   0
<⁄IfModule>

 

StartServers

 - 아파치(Apache) Start 시 생성되는 자식프로세스의 갯수를 지정

 

MaxClients

 - 아파치(Apache) Start시 최대 생성 가능한 자식프로세스의 갯수

   (worker 의 경우 프로세스 * 최대 쓰레드 갯수 입니다.)

 

MinSpareThreads

 - 아파치(Apache)가 유지할 최소 쓰레드수

 

MaxSpareThreads

 - 아파치(Apache)가 유지할 최대 쓰레드수

 

ThreadsPerChild

 - 하나의 자식프로세스가 가질 수 있는 쓰레드의 갯수

 

MaxRequestsPerChild

 - 클라이언트들의 최대 요청갯수, 기본값은 0 이며, 무한대입니다. 이 갯수만큼 클라이언트로부터 요청을 받았다면 자식 프로세스는 자동으로 죽고

   다시 생성 됩니다. 아파치(Apache)서버가 자주 다운되거나 메모리 문제가 발생한다면 이 값을 조절하여 해결을 봅니다.

 

 

현재 설치된 또는 구동되고 있는 아파치(Apache)가 어떤 MPM방식으로 동작중인지를 확인하려면 http -l 또는 httpd -V (V는 대문자) 로 확인이 가능합니다.

 

[root@localhost ~]# ⁄usr⁄local⁄apache⁄bin⁄httpd -V
Server version: Apache⁄2.2.20 (Unix)
Server built:   Oct 14 2013 16:16:52
Server's Module Magic Number: 20051115:28
Server loaded:  APR 1.4.5, APR-Util 1.3.12
Compiled using: APR 1.4.5, APR-Util 1.3.12
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server⁄mpm⁄prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="⁄usr⁄local⁄apache"
 -D SUEXEC_BIN="⁄usr⁄local⁄apache⁄bin⁄suexec"
 -D DEFAULT_PIDLOG="logs⁄httpd.pid"
 -D DEFAULT_SCOREBOARD="logs⁄apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs⁄accept.lock"
 -D DEFAULT_ERRORLOG="logs⁄error_log"
 -D AP_TYPES_CONFIG_FILE="conf⁄mime.types"
 -D SERVER_CONFIG_FILE="conf⁄httpd.conf"

 

 

[root@localhost ~]# ⁄usr⁄local⁄apache⁄bin⁄httpd -l
Compiled in modules:
  core.c
  mod_authn_file.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_include.c
  mod_filter.c
  mod_log_config.c
  mod_env.c
  mod_unique_id.c
  mod_setenvif.c
  mod_version.c
  mod_ssl.c
  prefork.c
  http_core.c
  mod_mime.c
  mod_status.c
  mod_autoindex.c
  mod_asis.c
  mod_cgi.c
  mod_negotiation.c
  mod_dir.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_so.c

 

제건 제가 테스트용으로 prefork 로 설치했기에 prefork 라는게 보이네요.

궁금하신게 있으면 댓글을 달아주시고.. 다음번엔 튜닝과 유용한 옵션에 대해 정리해보도록 하겠습니다.

 

'Web > Apache' 카테고리의 다른 글

Apache 메모리 누수  (0) 2012.09.05
Apache - mod_jk2 설치 중 configure: error: can't locate libapr 에러  (0) 2012.07.26
apache conf (httpd.conf)  (0) 2012.03.19
apache configure 옵션  (0) 2012.03.19
Posted by 소울하트
시스템/Linux2013. 11. 15. 18:07

php 5.2.1 make 시 mysqli 오류가 발생할 수 있습니다.

 

 

⁄usr⁄local⁄php⁄ext⁄mysqli⁄mysqli.c: In function 'zm_startup_mysqli':
⁄usr⁄local⁄php⁄ext⁄mysqli⁄mysqli.c:625: error: 'MYSQL_RPL_MASTER' undeclared (first use in this function)
⁄usr⁄local⁄php⁄ext⁄mysqli⁄mysqli.c:625: error: (Each undeclared identifier is reported only once
⁄usr⁄local⁄php⁄ext⁄mysqli⁄mysqli.c:625: error: for each function it appears in.)
⁄usr⁄local⁄php⁄ext⁄mysqli⁄mysqli.c:626: error: 'MYSQL_RPL_SLAVE' undeclared (first use in this function)
⁄usr⁄local⁄php⁄ext⁄mysqli⁄mysqli.c:627: error: 'MYSQL_RPL_ADMIN' undeclared (first use in this function)
make: *** [ext⁄mysqli⁄mysqli.lo] 오류 1

 

그럴경우 mysql.h 파일을 find 로 찾아서 enum mysql_protocol_type 밑에 아래처럼 추가합니다.

enum mysql_protocol_type
{
MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
};


enum mysql_rpl_type
{
MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
};

 

enum mysql_rpl_type 저 내용을 추가해 주면 됩니다.

 

저 같은 경우는 mysql.h 파일이 /usr/local/mysql/include/mysql.h 여기에 있군요.

추가후에 다시 make 하면 잘 되는군요.ㅎㅎ

Posted by 소울하트
시스템/Linux2013. 11. 7. 19:17

요즘 워드프레스로 홈페이지를 구축하고 이용하는것이 많이 보편화 되었는데요,

 

구글플러스에서 글 등록할때 포스트를 보낼때 curl 을 사용합니다.

 

curl 을 사용했을때 https 로 접근시 오류가 발생할 때가 있습니다.

 

저 같은 경우는 지메일에서 받은편지함을 불러올때 오류가 나더군요..

 

error setting certificate verify locations:
  CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none

 

위와 같은 오류가 나와서 구글링과 별의 별 작업을 해본결과.. 허무하게 /etc/pki/tls/certs/ca-bundle.crt 이 파일에 대해서 일반유저 읽기 권한이 없는것을

확인!! 황당함과 동시에 권한을 주니 문제가 없더라구요.ㅜㅜ

 

 

$cURL = curl_init(); ⁄⁄ cURL 초기화
curl_setopt($cURL, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($cURL, CURLOPT_USERPWD, "지메일 아이디:비밀번호");
curl_setopt($cURL, CURLOPT_SSLVERSION, 3);
curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($cURL, CURLOPT_URL, "https:⁄⁄mail.google.com⁄mail⁄feed⁄atom");
$chResult = curl_exec($cURL); ⁄⁄ cURL 실행 
curl_close($cURL); ⁄⁄ cURL 종료
echo $chResult; 

 

 

 

 

Posted by 소울하트
시스템/Linux2013. 10. 24. 22:43

 

 

./configure

 

하기 전에

 

export CFLAGS="-fPIC"
export CC="gcc"

 

또는

 

export CC="gcc -m64 -fPIC"
export CXX="g++ -m64 -fPIC"
export F77="g77 -m64 -fPIC"
export FC="g77 -m64 -fPIC"

 

입력후  설치

Posted by 소울하트
Database/MSSQL2013. 6. 19. 12:11

특정 데이터를 같은 테이블 혹은 다른테이블에 INSERT 하기 입니다.

 

IDENTITY 값이 설정된 필드에 INSERT 를 위하여 SET IDENTITY_INSERT 테이블명 on 설정

 

아래의 예제는 test 의 select 결과를 test1 DB에 INSERT 하는 SQL문 입니다.

SELECT 문 뒤에 WHERE 절을 붙여 조건을 명시할 수 있습니다.

혹 오류가 발생한다면 컬럼명을 명시해줘야 합니다.

 

 

use [데이터베이스명]

SET IDENTITY_INSERT 테이블명 on



INSERT INTO test1.dbo.테이블명 SELECT * FROM test.dbo.테이블명



SET IDENTITY_INSERT 테이블명 off





컬럼명 명시시



INSERT INTO test1.dbo.테이블명(Filed1, Filed2, 등등) SELECT * FROM test.dbo.테이블명(Filed1, Filed2, 등등)

'Database > MSSQL' 카테고리의 다른 글

MSSQL 로그 삭제 및 로그 축소  (0) 2013.02.04
Excel OLEDB 설정  (0) 2012.11.05
Posted by 소울하트