기본 콘텐츠로 건너뛰기

11월, 2008의 게시물 표시

Windows에서 F1이 도움말로 작동하지 않도록 하기

스왑 당하기 싫어!

현존하는 많은 OS는 스왑 시스템을 사용한다. 스왑이 가지는 장점 가운데 하나는 실제 존재하는 물리적 메모리보다 더 많은 메모리를 사용할 수 있다는 것이다. 물론 그에 따른 속도 저하가 발생할 수 있지만, 다양한 전략과 하드웨어 발전으로 스왑 시스템이 가지는 단점을 보안할 수 있다. 리눅스에서 스왑 전략을 백분율로 설정할 수 있다. 간략한 설명은 이곳(http://purewell.egloos.com/2781667) 을 참조하자. 그외도 강박증 프로그래머는 POSIX 시스템에서 mlock함수를 이용할 수 있다. mlock은 일부 메모리 영역이 swap-out되는 것을 막아준다. 다만 swap-out을 할 수 있는 영역에 제한이 매우 크기 때문에 매우 작은 메모리 부분에 대해서만 mlock을 사용할 수 있다. CentOS 5.x에서 약 32킬로바이트 정도이다. 원본 위치: http://purewell.egloos.com/3992331

POSIX messagequeue

POSIX IPC에서 마지막-IPC는 이것 외에도 많다-으로 소개할 녀석은 메시지큐 이다. 간략히 뭐하는 녀석인지 설명하자면, ' 우선순위가 있는 줄서기 '랄까? 일단 Queue라는 말에서 이 녀석은 기본으로 먼저 던져넣은 메시지를 먼저 꺼내올 수 있다. 근데 가끔씩 긴급해 보내야할 메시지가 있을 수도 있을까...해서 메시지에 우선순위를 둘 수 있다. 그래서 때에 따라 우선순위가 높은 녀석이 나중에 큐에 들어갔는데도 먼저 나올 수 있다. 뭐 이런 녀석이다. 이 역시 SysV에서 뛰쳐나온 녀석이라서 SysV용 API가 있다. msgget으로 메시지큐 핸들을 얻어내어, msgsnd/msgrcv 등으로 적당히 메시지를 던지고 받을 수 있다. 이때 우선순위는 정수형으로 줄 수 있다. 다 사용한 메시지큐는 msgctl로 정리하여 OS에 반환할 수 있다. SysV 메시지큐 설명 끝. 역시나 내가 보고자 했던 것은 POSIX API. SysV 메시지큐 개념을 그대로 POSIX API에도 마련하였다. 메시지큐를 먼저 커널에 등록해야할 것이다. 이것은 이미 누누히 봤듯이 *_open 함수가 해줄 것 같다. 이 역시 mq_open함수가 그 일을 해준다. mqd_t mq_open(const char* name, int oflag, mode_t mode, struct mq_attr* attr); 뭐...뭔가 길다!? 반환값이 int가 아니라 mqd_t이긴 하지만, mqd_t 또한 int이다. 에러가 발생하면 (mqd_t)-1 을 반환한다. name, oflag, mode는 open함수 인자와 동일하다. name은 기존 shm_open, sem_open처럼 '/'로 시작하는 메시지큐 이름을 적는다. oflag에는 O_*로 시작하는 플래그를 OR연산으로 넣는다. oflag에 O_CREAT가 없으면 mode, attr 인자는 무시한다. mode는 파일을 생성할 때 접근제어이다. attr을 알아보기 위해 struct mq_attr을 살펴보자. struct mq

화면 갈무리 - 파이어폭스 확장기능

파이어폭스 1.5시절부터 2.x때까지 잘 쓰던 확장기능 가운데 하나는 GraphicsEx 이다. 이 녀석이 가지는 주 기능은 파이어폭스에서 그려진 웹 페이지 전체를 PNG파일로 갈무리 하는 것이다. 그러나 안타깝게도 제조사가 망했는지 홈페이지도 열리지 않고, 3.x용으로 업그래이드도 없다. 이 기능 하나 때문에 파이어폭스를 2.x로 다운그래이드 할 수는 없지 않은가. 그래서 이래저래 찾아본 결과 다양한 화면갈무리 확장이 있었고, 심지어 동영상으로 갈무리 해주는 녀석도 있었다. 이것저것 다 깔아보고 비교해본 결과 - 자세한 내용은 귀찮아서 생략한다 - iimmgg.com Tools 가 가장 적절해보였다. 적절히 모질라 확장기능 홈페이지에서 iimmgg로 찾아서 설치해서 쓰도록 하자. 아래는 내 블로그를 이것으로 전체문서 갈무리를 한 것이다. 원본 위치: http://purewell.egloos.com/3988067

정동영씨 복귀 바랍니다

‘복귀설 솔솔’ 정동영 전장관 그는 정치역정에 회한이 많은 듯했다. "나만큼 실패를 많이 해 본 정치인도 없을 것이다. 대선·총선도 실패했고, 진두지휘했던 지방선거에서도 졌다. 당의장도 두 차례나 중도하차했다. 영광은 짧았고 패배는 고통스러웠다." 그는 여전히 달변이었다. "하지만 실패를 두려워하고 머뭇거리지 않았다. 내 온몸을 다 던졌다. 감히 말하건대, 패배를 두려워하는 정치인은 아니었다." 그의 미국 생활은 칩거나 침잠보다는 학습과 준비 성격이 짙어 보였다. 정동영씨는 최선도 최악도 아니다. 최소한 어제보다 조금은 나은 정치 를 보여줄 사람 가운데 하나라고 본다. 얼른 복귀하길 바란다. 원본 위치: http://purewell.egloos.com/3988064

nscd가 CPU를 모두 먹고 있나요?

서버를 운영하다 보면 가끔씩 CPU를 100%씩 쳐드시는게 있다. 흔치 않지만 nscd 라는 녀석이 CPU를 홀로 와작와작 계~~~~~속 쳐드시는 경우가 있다. '나 혼자 그런거야? 설마~'라는 심정으로 구글에 검색해보니, 나 말고도 겪는 사람이 많은 듯. 일단 nscd라는 녀석이 뭐하는 녀석인지부터 알아야겠다. nscd는 Name Service Cache Daemon 이란 녀석이다. 각종 네임서비스(DNS나 ID/Password 같은) 효율을 높히기 위해 메모리에 와작와작 캐쉬해놓고 꺼내주는 녀석이다. 캐쉬를 보통 메모리에 올려놓기도 하지만, 매번 사람이 보기 쉬운 텍스트 파일을 해석해서 컴퓨터가 보기 편한 바이너리 파일로 저장해놓기도 한다. 아까 말한 CPU 100%는 이 바이너리 파일이 깨져서 nscd 내부적으로 어디선가 무한 루프를 돌고 있는 것이라고 생각할 수 있다. 마음 같아서는 내가 확 뜯어 고치고 싶긴 하지만, 소스 관리자가 내 소스를 받아줄지 의문이고... 일단은 간단한 미봉책이나 적어야겠다. 자주 발생하는 것이 아니니, 100%를 감지하면, 적당히 /var/db/nscd 디렉토리에 파일을 가볍게 날려주고 nscd를 재시작 해주자. 원본 위치: http://purewell.egloos.com/3966126

이 블로그의 인기 게시물

Bash Array, Map 정리

Bash에서 Array, Map에 대한 정리. (매번 찾기 귀찮) 찾아보진 않았지만, Bash에서 Array든 Map이든 동일하게 Map(C++에서 Unordered Map)으로 동작하는 것 같다. 왜냐하면, Array의 Index가 연속하지 않아도 동작한다. 그저 Key가 0 이상의 정수인 Map이랑 비슷하게 동작한다. 예) 1, 2, 3, 9, 10 Array # 생성 declare -a empty_array declare -a ar=(haha hoho baba "long string haha hoho") # 접근 echo "ar[0]=${ar[0]}" echo "all as array=${ar[@]}" # 큰따옴표 안에서 각 원소를 따로따로 전달한다. echo "all as one=${ar[*]}" # 큰따옴표 안에서 각 원소를 문자열 하나로 합쳐 전달한다. echo "indexes=${!ar[@]}" echo "indexes=${!ar[*]}" echo "length=${#ar[@]}" echo "length=${#ar[*]}" echo "last=${ar[-1]}" echo "last=${ar[@]: -1}" # 콜론 뒤에 빈 칸이 꼭 필요하다. 옛 방식 # 현재 상황 declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho") ar[100]=hello # 인덱스를 건너 뛰어도 동작한다. declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]=&

설치한 패키지에서 RPM 추출하기

오래된 패키지를 관리할 저장소가 없어졌고, 기존 패키지로 다른 서버를 세팅해야할 일이 생겼다면 RPM의 리패키지 기능을 이용해보자. $ rpm -e --repackage [PACKAGE_NAME] 위와 같이 리패키지하면, /var/spool/repackage/ 에 생성한 RPM파일이 있다. :-)