연애소설

승렬이가 티비에 나왔다길래 “나는 남자다”라는 프로그램을 다시보기로 봤다. 왜 그렇게 페북에 ㅋㅋㅋ(크크크)로 도배를 했나 했더니 이거였꾸나. ㅋㅋㅋㅋㅋㅋ

가만히 티비를 보고 있자니 우유니사막도 가보고 싶고, 저 오토바이를 타고 유럽을 횡단한 저 친구의 말 한마디가 내 가슴팍을 찔러온다. “인생에서 최소한 한번은 내가 하고 싶은걸 해봤다”라는 생각에 펑펑 울었다는 저 친구의 말이 내 하루를 온통 뒤흔들어 놓을 것만 같다. 나도 꿈이 엄청 많은 사람인데,… 나는 도대체 뭐하고 있는거지?

생각에 빠져있다간 또 늦을것 같다. 부랴부랴 씻고 차에 올라탄다. 그런데 오늘은 정말 날인가? 아니나 다를까,… 오빠가 좋아할 만한 글이라며 여자친구가 던져준 링크는,… 1. 내가 좋아하는 일을 미래로 만드는 방법 2. 실리콘밸리 네트워킹의 네 가지 특징

일단 1번 글은 어디서 한번쯤 본 듯한 글이었지만 처음 읽는 것처럼 신선하다. “아니 너는 도대체 나한테 이런 글을 주는 이유가 뭐야? (회사 열심히 다니라며?) 안그래도 당장 회사를 그만두고 싶은데,…” 그랬다. 당황해하는 모습을 보면서 또 이런저런 얘기를 나눈다.

2번 글은 지난 미국 출장을 다녀오면서 느꼈던 것과 동일하다. 어딜가든 누굴 만나든 편히 물어보는 것중에 하나가.. 너 무슨일해? 이건데,… 난 도대체 회사에서 뭘고 있는지 딱히 설명할 길이 없어서 몇번을 설명하다가 그만 포기했다. 우리말로 얘기하기도 벅찬데 영어로 얘기하자니 어지럽다. 그 다음부터 누군가 무슨일 하니? 물어오면,.. “I am looking for new job here!” 이렇게 얼렁뚱땅 넘어갔다. 뭐 거짓말은 아니니까.

집으로 돌아오는 길에 불연듯 떠올라서 다시 통화버튼을 누른다.

“음.. 오빤데 할말이 있어”
“응? 뭔데?”
“우리 연애소설 쓸래?”

아침부터 고민했던 내가하고 싶은 것중 하나. 연애소설 쓰기! 내가 쓰고 싶은 소설은 학창시절 읽었던 야설 만큼이나 농도 짙은 진정 달콤 쌉싸름한 알콩달콩 연애소설이 아니다. 누구나 자신의 연애 경험은 특별하지 않나? 냉정과 열정사이에 나오는 소설만큼 애틋하고 되돌아가면 진짜 더 잘 할 수 있을것 같고, 그렇다고 내가 돌아가고 싶다는 얘긴 아니지만… 그냥 현재를 남기고 싶다. 내가 살아가고 있는 현재의 역사… 언젠가 누군가 읽게 되겠지. 아마 그 사람도 나겠지만,

오랜만에 감성팔이,… 월요일 새벽,… 아~! 월요일부터 힘들겠꾸나… 휴가낼까? ㅎㅎ

Read More

물거품, nginx server is down!

사전 정의

  1. 물이 다른 물이나 물체에 부딪쳐서 생기는 거품.
  2. 노력이 헛되게 된 상태를 비유적으로 이르는 말. > 유의어 : 수포1, 포말3, 뜬구름

오늘 오후 지메일로부터 한통의 메일을 받았다. 당신의 사이트가 24시간 동안 크롤링이 되지 않는다. 즉, 서버가 죽었다는 말이다. 왜 죽었는지 이유는 모르겠다. 불연듯 떠오른 나의 생각은 다른거 다 제껴두고 매일 로그인해서 이벤트를 응모하도록 만들어놓은 cron 잡들이었다. 아니나 다를까! 멘붕! OTL,… 심열을 기울여 한달 스템프를 모두 받겠다고 야심차게 스크립트까지 만들어 돌렸는데,… 토요일 하루 도장이 없다! 망했다! 진짜 이번엔 성공할줄 알았는데… 제대로 한방 먹었다. ㅜㅜ 정녕 내년을 기약해야하는 것인가? ㅎㅎ

서버는 언제 죽은 것일까?

아까 낮에 허탈함에 어떻게 해야지? 어떻게 해야지? 발만 동동 굴렸는데,.. 역시 밤이 되니까 여러가지 생각을 되짚어보게 된다. 서버가 왜 죽었을까? AWS로 옮겨온 이후로 2번째다. 그리고 nginx로 넘어온 뒤로 역시 두번째다. 지난번에는 php모듈을 건들다가 발생한 문제라서 php-fpm이 문제겠꺼니 쉽게 유추해낼수있었는데.. 이번엔 도대체 뭐지?

언제 죽었는지도 알수없고, 얼마나 오랜동안 죽어있었는지 조차도 알수가 없었다. 그래! 결심했어! 찾아보자! 뚜두뚜~ 뚜두뚜~ 뚜두뚜~ 뚜뚜루루~ 뚜두뚜~ 뚜두뚜…

그래 일단 AWS에서 제공하는 모니터링 로그를 살펴보는거야!

지난 토요일에 스템프가 찍히지 않는걸로 봐서 최소 2일이상의 로그를 봐야한다. 그래서 3일짜리 네트워크 유입량부터 살펴봤다. network 아니나 다를까 12월 14일 오전 8시경 네트워크 유입량이 짧은 시간안에 엄청나게 몰렸다. UTC 기준이니까 실제 한국시간으로는 오후 5시쯤이 아닐까? 어라? 그러고보니 내가 서버를 확인한 시간이 오후 5시쯤인데 오후 5시에 죽었따고? 말이 안되는데? 쫌 이상하다! 이미 그전에 서버 응답이 없어야되고, 지메일은 분명히 지난 24시간동안 최소 1번 이상 응답이 없었다고 알림을 줬다. 그리고 이 메일을 받은 시각은 오전 10시경,.. 그렇다면 최소 어제 오전 10시 이전에 서버가 죽어 있거나 응답이 없었다는 얘기가 된다. 그래야 말이 된다. 왜냐면 내가 매일 오전 10시에 스템프를 찍도록 크론잡을 돌려놨었는데,.. 이 크론잡도 실행을 못했다는 얘기는 10시전에 서버에 뭔가 문제가 생겼다는 얘기가 된다. 다른 로그를 좀더 살펴봐야겠다.

multi-log 음,.. 뭔가 추이가 이상하다. 네트워크 아웃을 보니 토요일 새벽 0시쯤 그러니까 우리나라 시각으로는 토요일 오전 9시경부터 네트워크 유입은 있지만 뭔가 서버가 응답을 못해주고 있다. CPU credit도 갑자기 뚝 떨어졌다. 아! 여기구나! 절묘하네. 토요일 오전 9시! 도대체 이날 무슨일이 있었던거지? 젠장 한시간만 늦게 죽지..ㅜㅜ 아니지.. 매일 한번씩이 아니라 6시간마다 한번씩 크론잡을 돌렸다면 적어도 문제는 없었는데…ㅜㅜ.. 아! 쉽! 다!…

토요일 오전 9시의 미스터리. 실마리를 찾아서

그럼 토요일 오전 9시경 문제가 될만한 로그부터 뒤져봐야겠다. 일단 syslog를 봐야된다길래 /var/log/syslog가 있는지 확인부터 해봤지만,.. 어머나! 없네? syslog를 찍는건 옵션을 따로 설정해야하는건가? 아~ 몰라,.. 패스.. 그럼 지난번 원인이었던 php-fpm 로그부터 보자.

$> cd /var/log/php-fpm
$> ls -al
-rw------- 1 root   root  2054 12월 14 17:38 error.log
-rw------- 1 root   root 20440 11월 22 22:24 error.log-20141123
-rw------- 1 root   root 15612 11월 30 01:56 error.log-20141130
-rw------- 1 root   root  2504 12월  6 02:36 error.log-20141207
-rw------- 1 root   root 97429 12월 14 16:29 error.log-20141214

어랏? 로그파일의 크기가 0이 아닌걸로 봐서는 진짜 php-fpm에서 뭔가 문제가 있었네? 열어보자! 뚜둥!! 뭐지 이건?

$> cat error.log-20141214
... 중략 ... 핵심만 ...
ERROR: fork() failed: Cannot allocate memory (12)
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 11 total

메모리를 할당할 수 없다고? 도대체 언제부터 이런거지? cat은 화면 출력 버퍼량 때문에 짤리니까 vi로 열어봐야겠다.

$> vi error.log-20141214
... 중략 ...
[12-Dec-2014 10:10:59] ERROR: fork() failed: Cannot allocate memory (12)

정확히 메모리 에러가 난 시간은 12일 오전 10시경, 참고로 리눅스 서버의 시간은 UTC 기준이었으나 크론탭을 설정할때 자꾸 헛갈려서 로컬 타임을 한국시간으로 바꿔놨다. 음,.. 그러니까 서버가 죽은 시간은 정확히 오전 10시 10분. 아! 10분만 일찍 죽었어도 12일부터 그놈의 스템프를 못찍었겠꾸나 ㅎㄷㄷ…

도대체 진짜 원인은 뭘까?

그래, php-fpm에서 처음 메모리 할당 오류가 뜬 시간이 지난 12일 오전 10시경이니까 처음 예상했던 시간보다 하루 일찍 문제가 찾아왔었군!… 그렇다면 실제 원인을 찾기 위해서 모니터링 로그를 좀더 넓혀서 살펴봐야겠다. 음.. 내가 뭔가 탐정된 느낌이군. ㅎㅎㅎ

multi-log-2weeks

아! 넓혀서 추이를 보니 이번엔 또 다른 단서가!! 네트워크 아웃을 보니 12일부터 밖으로 나가는 트래픽이 없어졌다. 덩달아 CPU 사용률이 훅~ 떨어지는걸 봐서는 확실히 12일부터 서버에 문제가 있었던것 같다. 그런데 그보다 앞서 CPU 사용률을 보니 지난 8일 오전 10시경부터 뭔가 CPU 사용률이 계단식으로 증가하고 있네!!! 뚜둥~! 마치 메모리 누수가 있을때 나타나는 현상처럼 증가하고 있다. 도대체 뭐지?

한편 이에 앞서 syslog를 대신할 만한 이벤트 메세지도 확인해봤다.

%> vi /var/log/message
... 중략 ....
Dec 12 10:11:10 ip-172-31-12-73 kernel: [604065.445632] php-fpm[9401]: segfault at 80001000321 ip 00000000005c8407 sp 00007fff305df290 error 4 in php-fpm[400000+325000]
... 중략 ....
Dec 12 18:17:24 ip-172-31-12-73 wordpress(miconblog.com)[8434]: Authentication failure for admin from 198.46.81.14
... 

여기서 잠깐!

로그를 보니 재밌는 현상을 발견했다. php-fpm에서 메모리 할당 오류가 나면 segfault 메시지를 발생시킨다는 사실과 더불어 인도에서 내 워드프레스 계정을 털려고 시도한 흔적이 보인다는 사실이다! 아~ 인도!! IT 강자로 급부상 중이라고 하더니… 흠..좀..무.. 다시 워드프레스 계정 보안 플러그인을 설치해야겠다는 생각이든다. php-fpm 문제 해결을 위해 검색을 좀 해봤더니 설정값을 좀 늘려보라는데,.. 그게 문제겠냐? 저렇게 무차별 DDos 공격에 당하면 서버가 죽어버리는데..ㅜㅜ..

여전히 알수없는 미스터리..

다시 돌아와서 지난 8일에 내가 도대체 무슨일을 했는지.. 기억을 더듬어봤다. 일단 캘린더에 등록된 저녁 일정엔 와인동호회 모임이 있었음을 알려준다. 하지만 월요일 오전엔 무얼했지? 페북에도 쓴 글이 없고, 지메일에도 주고 받은 내역이 없다. 그리고 몇일전에 서버에 노드앱을 추가한게 떠올랐다. 혹시나 싶어 로그를 살펴봤으나.. 젠장 로그에 시간을 안찍어놨네.. 망할… 내일 회사가면 회사 메일을 한번 뒤져봐야겠다. 아~~ 여기까지 추적해왔는데.. 이녀석이 꼬리를 짜르고 도망간 느낌이다. 내 기필코 니놈을 잡고 말테다.

현재, 수사선상의 용의자.

  1. php-fpm: 그냥 너는 서버를 죽인 실체
  2. 인도 해커들의 무차별 로그인 공격: 일종의 DDos 공격,… 내가 너무 방어를 안했나? php-fpm에 많은 부하줌.
  3. 내가 만든 노드 앱들에서 발생하는 메모리 누수(?),.. 모르겠다.
  4. 그냥 서버 자원이 쪼들려서 그런건가?,..

아무리 생각해도 난 저 계단식 사용률에 문제가 있지 싶다. 그동안 아무런 문제가 없다. 8일부터 특이한 계단식 로그가 찍히는걸봐서는 강력하게 의심이 되는데,.. 그것도 일정하게 증가하는걸로 봐서는… 아! 인도해커들이 일정한 주기로 공격을 하는건가? 아놔 모르겠다.. 일단 자자.

Read More

apache에서 nginx로 갈아타기

요즘 AWS 덕분에 리눅스라는 녀석을 조금 더 딥하게 보고 있는데 리눅스 이녀석 자체만으로 공부할게 너무 많다. 각설하고 오늘은 그동안 공부한 것들 복습도 할겸 미뤄뒀던 동구밭 블로그를 nginx로 갈아탔다. 갈아타는 과정을 좀 정리해보면 다음과 같다.

  1. 리눅스 계정 및 웹서버 루트 폴더 이동
  2. CentOS 5.x 버전에서 yum으로 설치가능한 패키지 버전 문제 확인
  3. CentOS 5.x 버전의 공식 릴리즈 사이트에는 php 버전이 매우 낮음을 확인
  4. CentOS를 6.x 버전으로 업그레이드 가능한지 확인. yum으로는 불가. 백업해서 재설치해야 함을 확인
  5. OS 업그레이드를 포기하고 yum으로 php5.4 버전 설치 (많은 삽질)
  6. yum으로 nginx 설치했는데.. 이것도 버전이 낮아서 yum 레파지토리 변경후 1.6으로 업그레이드

과정이 참 긴데,.. 오늘 느낀점은 yum 명령과 레파지토리에 관련된 내용을 좀더 공부해야겠다는 생각을 했다.

웹서버 루트 폴더 정리

여튼 그간의 과정을 되짚어보자. 일단 웹서버 루트가 어디에 있는지 확인했더니 /home/www 였다. 아~~ 홈폴더 하위에 웹폴더를 뒀었꾸나… 얼마나 개념이 없었는지 실감하면서,.. /var/www/nginx_root로 이동 감행! 이제 나에게 리눅스 계정과 권한문제는 껌이지ㅋㅋㅋ 폴더를 생성하고 소유자를 nginx로 변경, 그리고 wordpress 폴더도 통째로 이동후 소유자(nginx)와 권한을 변경! wp-content 폴더는 간편설치를 위해 655 권한으로 변경. 소유자를 nginx로 했기 때문에 사실 600으로 해도 된다.

nginx와 php 설치

다음으로 아파치 서버와 mysql를 내리고 기존에 설치되어 있는 php 버전을 확인해봤다.

$> php --version

옴마~ 5.1 버전??? 왜이렇게 버전이 낮지? 이거 작년에 설치했을텐데,.. 이유를 알아보기 전에 일단 지우자.

$> yum remove php*

지우고 나서 yum 으로 설치 가능한 패키지를 알아보니 CentOS 5.x 버전에 있는 공식 릴리즈 모듈에는 5.1까지 밖에 없는게 아닌가? “아~ 난감한데… 어떻하지?.. 그냥 최신 버전을 홈페이지에서 직접 받아서 컴파일 할까?” 하다가 예전에 php 버전에 따른 의존성 모듈들 때문에 고생한 한 기억이 떠올라서(파이썬을 직접 업그레이드하다가 꼬여서 파이썬에 의존성이 매우 심한 yum 명령어를 날려버렸던 씁슬한 기억) 이번에는 온전히 yum 으로만 해결하려고 맘먹었다.

이 문제를 어떻게 해결할까? 한참 찾다 결국엔 yum 레파지토리를 업데이트해야한다는 사실까지 알아냈다. ㅎㅎㅎ 아무튼 현재 내가 쓰고 있는 CentOS 버전은 5.11(final) -_-;; yum을 이용해 상위 버전으로 업그레이드는 못한단다. 그리고 5.11의 공식 라이브러리 레파지토리에는 php 버전도 5.1 이고 심지어 nignx도 0.6 버전이었다. 자세한 설치는 검색하면 나온다.

nginx는 php 모듈을 지원하지 않기 때문에 php-fpm 이라는 FastCGI 모듈을 이용해야한다. 여튼 php와 관련된 모든 연동 모듈은 remi 라는 레파지토리를 이용했다. 배가 너무 고픈 관계로 일단 여기까지 정리하고 다음에 이어서 정리하자.

오늘 새롭게 알게된 내용

  1. ningx는 php 대신에 php-fpm 모듈을 이용한다.
  2. 워드프레스에서 이미지 크롭하려면 그래픽 처리와 관련된 php-gd 라이브러리가 설치되어 있어야한다.
  3. CentOS 5는 후졌다. 하지만 어쩔수 없다.
  4. yum 레파지토리를 변경하거나 업데이트 할 수 있다.
  5. 확실히 하드웨어가 저사양일 경우 아파치보다 nginx가 훨씬 좋터라!

Read More