CentOS6 에서 php7 – memcache 설치

php7 버전에서는 pecl 을 이용하여 pecl-php-memcache 를 사용할수 없다.

php7에서 memcached 를 이용하시 위해서는 php-memcached 를 사용한다.
이프로그램을 필수 라이브러리로 libmemcached, libmemcached-devel 를 필요로 한다.

라이브러리설치는 CentOS7 의 경우 yum으로 설치진행을 할 수 있다. ( libmemcached-devel-1.0.16-5.el7.x86_64 )

 

다만 CentOS6에서는 yum 설치를 할경우 어이없이 낮은 버전인 0.31 이 설치되어 php-memcached 를 설치 할 수 없다.
때문에 별개의 패키지를 다운 받아 RPM 설치를 해야 한다.

 

php-memcached 설치방법.

 

아래와 같이 설치된 so파일을 불러오도록 설정하고

php.ini 파일에 session 생성을 memcache를 쓰도록 한다.

이후 php 에서는 세션 스타트 후에 session_regenerate_id 을 호출해야 한다.

 

PS. 별도 세션폴더를 지정하여 쓰는 프로그램의 경우 오류가 난다.( 그누보드등 )

 

bash 에서의 멀티 쓰레드 구현

bash 는 단순히 순차 실행이 되는 구조이기 때문에 일반적으로 싱글 쓰레드로 볼 수 있다 ‘ㅅ’a
하지만 실행속도 향상을 위해 다중실행하는것이 유리 하다면 그렇게 만들면 되겠다 ‘ㅅ’a

리눅스는 기본적으로 프롬프트에서 background 실행을 할수 있다.
보통 백업을 할때 ‘ㅅ’a

 

이걸 응용하여 단순실행용 스크립트와  여러 명령어를 실행하는 스크립트를 두개를 만들어서 구성 해야 하겠지만..

여기서는  list 어레이에 선언된 숫자 값을 각 쓰레드에서 sleep 하는걸로…..
최대 리미트 $th 에 선언된 8의 갯수 만큼 동시실행을 하고 기존 프로세스들이 종료될 경우 추가 실행을 하도록 하였다 ‘ㅅ’a

  1. 백그라운드로 돌아가는 명령어
  2. 이를 확인하는 jabs 명령어
  3. 프로세스 종료를 기다리는 wait 명령어

위와 같은 명령어 조합으로 멀티쓰레드 구현이 간단히 되었다. 🙂

8쓰레드 의 단순 성능향상은 8배 이겠지만 단순히 8개 동시 실행을 하고 먼저 실행된 애들이 종료되면 순차실행을 하기 때문에..
에러이 선언된 시간들은 총 64초 이지만 멀티쓰레드 구현을 했을때에는 14초가 걸릴것이다 ‘ㅅ’a

 

PS. 싱글쓰레드에서 4분 56초 걸리는 작업 ( BIND[named.conf/zone] -> Pdns query )을 멀티쓰레드로 구현했을때 1분 44초가 걸렸다 ‘ㅅ’a

yum에 대해서…

CentOS 및 redhat 계열을 쓰면서 안써본사람은 없은 yum
기본적으로 yum은 배포 패키지를 설치하는 명령어 이다 ‘ㅅ’a

/etc/yum.repos.d/ 폴더에 위치하는 레포지트리에 입려된 주소를 참조하여
패키지를 검색하고 검색된 패키지를 설계도에 맞게 설치하는 역할을 한다.

그럼 레포지트리는 무엇이냐 ‘ㅅ’a
A레포지트리에서 ccc 라는 패키지를 설치 할때 서버에 설치되는 위치와
B레포지트리에서 ccc 라는 패키지를 설치할때의 위치가 틀리다.

각 레포지트리에 따라서 설치되는 패키지의 버전역시 틀려진다.
A 레포지트리에서는 버전 1.0.0 을 /usr/share/ 폴더에 설치 하지만
B 레포지트리에서는 버전 2.0.0 을 /usr/include/ 폴더에 설치 할 수 있다.

즉 레포지트리라는 것은 설계도면을 배포하는 곳 정도로 인식을 하면 비교적 정확하다고 생각된다.

 

구글신은 많은것을 알려주지만 각각의 엔지니어 특성에 따라 주로 쓰는 레포지트리는 틀릴 수 있다.
때문에 하나의 메뉴얼을 따라 하다가 안된다고 다른 메뉴얼을 따라하다가는 시스템이 엉망으로 꼬일 수 도 있다.
( 물론 두 메뉴얼이 같은 레포지트리를 이용한 메뉴얼이라면 좀 덜꼬이겠다.. )

 

yum 은 아래와 같은 사용방법으로 일반적인 사용을 한다.

 

또한 설치된 패키지의 새 설계도면에 따른 업데이트도 할수 있다.

 

또는 아래 명령어로 모든 설치패키지를 업데이트 할수도 있다 ( 심지어 커널업데이트 까지 )

 

그리고 뭔가 설치해야할 명령어(ex ftpwho)가 있다면 아래와 같은 방법으로 명령어를 포함하는 패키지를 검색을 할수도 있다.

 

최종적으로 귀찬이즘이 극에 달한 엔지니어는 yum 업데이트를 주기적으로 하는게 싫어서
아래와 같은 방법으로 자동 업데이트 데몬을 운영할수도 있다. ( 이건 아직 나도 안해봤음… )

아파치에 Access-Control-Allow-Origin 관련 설정하기.

워드프레스 테마들은 font-awesome의 아이콘을 많이 이용 한다. http://fontawesome.io/icons

폰트가 로딩이 안될경우 아래 그림처럼 아이콘이 깨져 보이게 된다 @_@a

20160825_PicPick_154639

 

그리고 또 다른 상황으로는 하나의 워드프레스에 여러 도메인을 연결해서 쓸때 crossorigin 관련 보안 문제 때문에
폰트나 css 로딩이 되지 않아 깨져보일수도 있다.

때문에 이를 허용해 header 에 이를 허용해주는 값을 삽입해야 한다.
일반적인 경우는 프로그래밍으로 해결 할 수 있지만 js 안에서 외부 폰트파일을 불러오도록 되어 있을경우 순수 서버설정의 헤더가 들어가기 때문에 주로 폰트쪽만 문제가 발생할 수 있다.

20160825_PicPick_154449

 

이경우 .htaccess 혹은 아파치 내에서 설정을 해야 해결 할 수 있겠다. ‘ㅅ’a
아래는 Access-Control-Allow-Origin를 파일에 따라 모두 허용해 줄수 있도록 설정하는 부분이다.

적용 후 아파치를 재시작 하고 접속 확인을 해본다 ‘ㅅ’a

출처 : 스택오버플로우

No space left on device: Couldn’t create the rewrite-map mutex

아파치 프로세스 정상 시작 못하고  error_log 에서 아래 메세지가 나오는 경우가 있다.

아파치 동작 환경에서 각 프로세스간 데이터 공유 및 동기화를 위해서 Semaphore 라는것을 생성한다.
문제는 아파치가 정상적인 종료가 아닌 강제 종료를 하게 된 경우 생성된 Semaphore 가 삭제 되지 못하고 누적이 된다는 것이다

때문에 서버에 한계선 이상까지 생성된 Semaphore 에 의해 새로운 아파치 시작시 Semaphore 를 생성하지 못해서 아파치가 시작이 되지 않는 증상이 나올 수 있다.

때문에 ipcs -s 명령어로 리스트를 뽑고 각 semid 의 연결된 pid 값을 가진 프로세스가 있는지 검사 해서
삭제하는 스크립트를 운용 한다 ‘ㅅ’a

 

메세지를 보면 이걸 스크립트로 만들어서 실행하고 아파치를 시작하면 된다 ‘ㅅ’a
아니면 서버에서 cron 등록해서 주기적으로 실행해도 된다 ‘ㅅ’a

ps. 세마포어와 뮤텍스는 멀티쓰레드 즉 병렬화 작업을 하는데 필수적으로 사용 되는 요소로 볼수 있다 ‘ㅅ’a
무한히 생성할 순 없으며 ~]# ipcs -ls 명령어로 현재 시스템의 제한 수치를 확인할 수 있다.