피터지고 치열하게 삶을 유지하다  
Front Page
Notice | Keyword | Tag | Location | Guestbook | Admin | Write Article   
 
2008/01에 해당하는 글 36건
2008/01/31   "Google 데스크톱"과의 만남 - 구글의 전략은 무엇일까? (1)
2008/01/30   현장에서의 닷넷: 삼성중공업 IAS 개발 프로젝트’ 사례 소개(개발방법론 적용사례?)
2008/01/29   '스콧 구슬리'가 말하는 닷넷의 현재와 미래
2008/01/21   리눅스 메모리 관리 - "왜? Free RAM이 거의 남아있지 않을까?" (1)
2008/01/19   서버가 안정을 되찾은것 같습니다.


"Google 데스크톱"과의 만남 - 구글의 전략은 무엇일까?

"Google 데스크톱" (http://desktop.google.com/ko/) 과의 만남은 정말 우연히 이루어졌습니다.
사실 그 존재 조차 모르다가(관심이 없었지요) iGoogle(http://www.google.co.kr/ig)을 꾸미던중 단순히 Google 데스크톱이 필요하다고 하는 가젯이 있어 간단한 ActiveX 종류겠거니 하고 설치하였습니다.

한번 노트북을 켜면 노트북의 최대 절전기능을 애용하여, 심하면 몇주를 계속 켜두기 때문에 iGoogle의 기능만 사용하며, 몇일을 보냈습니다. 그런데 디스크 검사할 일이 있어 재 부팅을 하였더니 못보던게 떡 하니 나타나더군요.

사용자 삽입 이미지

바로 사이드바였습니다.
그래도 iGoogle을 사용해본 가닥이 있어, 필요한 가젯을 선택하여 입맛에 맞게 꾸미는게 어렵지 않았습니다.
생각보다 괞찮구나 하는 생각을 하게 되었습니다.

그런데, 후로 시스템이 조금 불안해진것 같더군요. ^^; 보기힘든 시스템 다운도 한번 있었습니다.
난데 없이 PDF2TXT 변환이 실패했다는 에러도 뜨더군요.

게다가, 조금만 컴퓨터에서 눈을 땔라치면 하드를 무진장 읽어대는 것입니다.
그제서야 비로서 구글 데스크톱의 진정한 기능을 알게되었습니다.
 
구글 데스크톱의 진정한 기능은 개인 컴퓨터 안에 숨어 있는 컨텐츠에대한 색인과 검색이었던 것입니다.

사용자 삽입 이미지
사용자 삽입 이미지

잠시 개인정보 보호에 대한 심한 우려로, 검색 잠금 및 옵션 설정을 통해 색인 기능을 꺼두었습니다. (^^; 그런데도 색인을 계속 시도하는듯....)

하지만, 구글 데스크톱이 이 색인한 걸 어떻게 할까 하고 관련 글들을 좀더 찾아보고서 생각을 바꾸었습니다. 하드는 방대하고, 가물 가물한 자료를 찾기위해 탐색기의 부실한 검색기능에 염증을 느끼던 중이었으므로, 한번 색인해두면 그렇게 하드를 괴롭히지도 않을거 같아, 꽤 유용할 수도 있겠구나 하는 생각을 하게 되었습니다.
결국 색인 기능을 사용하기로 결정하였습니다.

Ctrl 키를 2번 누르면 바로 검색을 할 수 있어서 좋더군요.
사용자 삽입 이미지
사용자 삽입 이미지

뭐! ^^; 이렇게 해서 비교적 싱겁게(?!) 첫만남과 조우가 마무리 되었습니다.

그런데 이런 의문이 들었습니다. 최근의 구글 전략에 대한 의문입니다.
제가 보기에 예전 검색 기능만을 제공하던 구글에서 최근 급속히 변화하는 것 같습니다.

검색 로그, 웹 마스터도구, iGoogle, Picasa, 구글 데스크톱, 노트, 블로그 검색등등 어떻게 보면 개인의 사적정보라 할 수 있는 것들까지 구글을 통해 관리되도록 유도하고 있다는 느낌을 지울 수가 없었습니다.
그리고 보다 적극적으로 개인의 사적 정보가 구글에 노출되도록 구글 검색 사이트의 전면에 이와 관련된 기능들을 배치하고 있습니다.

예전에 Tesseract라는 구글에서 스폰서하는 오픈소스 OCR 엔진을 가지고 프로젝트를 진행했던 것이 기억납니다. 구글이 적극적으로 지원하고 있다는 소리에, 컨텐츠 확보를 위해 텍스트 문서뿐만 아니라, 이미지 문서에까지 의미 있게 할려는 의도를 갖고 있구나 하는 생각을 잠시 했던 것이 생각납니다.

아마 분명 개인 컴퓨터에 잠자고 있는 컨텐츠를 구글이 자신의 컨텐츠로 삼을려는 욕심은 없을 것입니다. 설혹 있다하더라도 그 야욕을 드러내기는 쉽지 않을 것입니다. 하지만, 제 추측에 따르면 적어도 색인정보 및 검색 로그가 마케팅에 이용될 것으로 보입니다.

저는 현재 인터넷이란 바다의 유용한 항해를 위해, 구글신의 도움을 받아야 한다는 절대적 믿음을 가지고 있습니다. 하지만 그럴수록 각종 포털 및 검색사이트, 심지어 OS를 만드는 MS까지 UCC니 Web 2.0이니 하는 것들을 들먹이며 개인의 사적 정보까지 자신들의 마케팅 리소스로 삼으려는 의도가 조금은 우려스러운게 사실입니다.

단순히 구글이 수집하는 검색 로그 및 추적 기록만 보더라도 개인이 인터넷에 무엇을 하고 있는지 적나라하게 드러납니다. 또한 개인의 성향과 현재 관심사등을 바로 추정이 가능합니다.
사용자 삽입 이미지


아마, 머지 않아 검색시 뜨는 관련 광고 링크가 단순히 키워드 기반 뿐만이 아닌 각 개개 사용자의 최근 웹 활동 기록에 근거한 해당 사용자만을 위한 광고 링크 순으로 배열될지도 모르겠지요?
가능성은 적어보이지만 도가 지나치다면 최근 자신이 관심을 갖고 찾아본 상품에 대한 광고 메일이 많아지는 현상이 생길수도 있을 것입니다. ^^;

영화로 시작해 현실 세계에 반영되기 시작한 감시받는 사회가 이제 사이버 세상에서도, 상업적 이유로 활성화 되는 느낌입니다.
하지만 저와 같이 평범한 개인에게는 매트릭스와 같은 안락하고 편한 세상이 되겠지요?! (제가 필요한 기능을 나아닌 남이 돈을들여 해주고 있으니 말입니다.)
 
다른 분들의 글을 찾아보았습니다.
유튜브 한국어 서비스에 대한 단상
2006년 Google 전략
구글의 한국뉴스 어떤 전략일까?
구글의 미래전략_매경_20080122


사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : 소프트웨어
Track this back : http://www.codeforum.net/blog/pitoosung/trackback/178
Commented by 비밀방문자 at 2009/07/10 15:32  r x
관리자만 볼 수 있는 댓글입니다.

name    password    homepage
 hidden


현장에서의 닷넷: 삼성중공업 IAS 개발 프로젝트’ 사례 소개(개발방법론 적용사례?)
스콧 구슬리 방한기념 MSDN 세미나의 두번째 섹션인
'현장에서의 닷넷: 삼성중공업 IAS 개발 프로젝트' 사례 소개
http://go.microsoft.com/?linkid=8167497


시청 소감

어제 소감을 밝힌 스콧 구슬리의 개인적 이야기 및 .NET에 대한 이야기도 재미있었지만 세미나의 두번째 섹션인 사례 소개 또한 못지않게 유익한 것으로 생각됩니다.
기존 DevDay에서 발표한 사례들이 그저 예제 수준의 조금은 실망 스러운 것들이었기 때문에 기대를 않고 보았었는데, 프로젝트를 진행하는데 있어 제가 항상 고민하던 부분들과 비슷한 사항들을 역시 고민하였고, 저와는 달리 이를 명쾌하게 해결하여, 성공적으로 프로젝트를 이끈것으로 보여 무척 인상적이었습니다.

제가 감명받은 부분은 프로젝트에서 .NET이 사용되었다는 것을 떠나 프로젝트를 성공적(개발자와 고객 상호만족)으로 이끌기위한 적절한 개발 방법론의 도입과 시행착오를 통한 보다 실질적인 개발 프로세스의 적용, 그리고 기술적인 면에서의 아키텍처 구조였습니다.

먼저 개발자로서의 개발 경험의 고하를 떠나 누구나 겪게되는 개발에 전혀 도움이 되지 않아 보이는 산출물에 대한 생생한 증언과 이를 현명하게 극복한 사례였습니다.(물론 1차 시행착오를 경험하였지만...)
요구사항 명세서를 예로 고객과 개발자의 언어 장벽이 얼마나 크며, 실적과시를 위한 요구사항 명세서가 개발 과정에서 얼마나 무용지물인지를 비교적 간단하지만 효과적으로 전달했다는 느낌을 받았습니다.

또한 요구 기능에 대해 가장 잘 알고 있는 사람은 고객이며, 따라서 테스트는 고객에의해 이루어져야 한다고 역설하고 마침내 이를 개발 프로세스에 포함하여 실제 그렇게 이루어지도록 한 부분은 기 알고있는 사실임에도 불구하고 항상 실천이 쉽지 않았기 때문에 비교적 성공적으로 이루어졌다는 면에서 신선하게 다가왔습니다.
특히 이런경우 개발 프로세스 도구가 도움이 될거란 확신을 얻을 수 있었습니다. 주객이 전도되는 불상사만 피한다면, Test와 Build, 배포, 피드백을 자동화 해주는 도구를 통해 고객이 자연스럽게 테스트에 동참하도록 할 수 있겠구나 하는 생각이 들었습니다. 저는 그동안 갖추어지지 않은 프로세스 내에서 고객이 테스트에 동참해야 한다는 원칙만을 고수하며, 정작 그런 환경을 제공하지는 못했기 때문에 실패하지 않았나 하는 생각을 해볼 수 있었습니다.

기타 1차 개발과정에서 나타난 개발 프로세스의 문제점들을 분석하여, 이를 해결하기 위한 과정과 적합한 방법론의 선택 그리고 적용까지의 과정을 위 내용을 포함하여 설명하는 부분은 저의 경우는 극히 일부에서만 성공하고 실패했던 경험이 많은터라 정말 공감이 가면서도 교훈이 되는 유익한 내용이었습니다.

부가적으로 일정과 관련하여, 고객의 기능 요구에 대한 개발자의 피드백 의무는 해당 요구사항 구현에 소요되는 구체적인 기간을 알려주는 것임과 PM이 할일이 개발자들로 부터 이들 시간 범위를 취합하여, 일정을 추정하고 고객과 조율하는 것임을 언급하는 내용에서 또 한가지 교훈을 얻을 수 있었습니다.
저는 그동안 고객(기획자)에게 일정을 알려주는 것이 당연한 의무임을 알고는 있었지만, 너무 정확한 시간 산정에 얽매인 나머지 항상 무리한 산정으로 귀결되어 버린 것은 아닌지 하고 되짚어 볼 수 있었습니다.
특히 왜 정확한 기간을 추정하려 애쓰는가? 란 지적에 귀가 번쩍 틔였는데, 예로 '기능 요구에 대해 구현을 하는데 빠르면 1일 길면 1년' 이라 답하는 것이 무엇이 문제인가? 구현 기간에 대한 답이 개발자가 해야할 꼭 필요한 의무이기는 하지만, 왜 굳이 정확한 기간을 말하려 애쓰는가? 경험에 의한 대략적인 범위를 말하고 고객과 개발자가 합리적인 기간 범위를 합의하여 공유해 나가는 과정이 중요하지 않겠는가? 하는 요지의 지적은 그 동안 제가 놓치고 있었던 부분을 일깨워 주었습니다.

그리고 이러한 신뢰할만한 일정 추정의 또 하나의 적인 요구사항의 잦은 변경이 실질적으로 불가피함과 이를 개발 프로세스와 도구로 충분히 극복할 수 있음을 보여준것 또한 유익했습니다.

앞의 내용이 프로젝트 매니저로서의 개발 프로세스 적용에 대한 사례연구였다면, 다음의 내용은 개발자로서의 주어진 기술적인 문제해결을 위한 아키텍처에 대한 것이었습니다.

시스템 아키텍처를 결정하는데 있어서의 요소들과 이의 우선순위 결정, 유연하고 독립적이며 확장성 좋은 UI 모듈을 위한 고민, 기존 시스템 분석을 통한 중요 요소 추출 과 각 요소들을 만족 시킬만한 기술 검토의 과정을 표를 통해 명료하게 정리하고 필요한 기술을 선택해 나가는 과정, 데이타 모델링을 위한 XML 선택의 과정등 기술적 측면을 설명하는 내용 또한 너무나 유익한 내용이었습니다.

특히 그동안 XML 사용시 항상 어려움을 겪던 저에게, XML Schema를 자동으로 Class 코드로 만들어주는 툴들이 있다는 것을 알게된것은 충격이었습니다. XML을 통해 그동안 코드를 많이 작성해 봤지만 왜 다들 XML Schema를 외쳐댔는지 이제서야 조금은 깨달은것 같았습니다.

여러가지 면에서 첫번째 섹션인 스콧 구슬리의 인터뷰 보다 훨씬 유익했다는 말로 시청 소감을 마무리 할까 합니다.
 
사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : 개발방법론
Track this back : http://www.codeforum.net/blog/pitoosung/trackback/177

name    password    homepage
 hidden


'스콧 구슬리'가 말하는 닷넷의 현재와 미래
닷넷의 현재과 미래
- 스콧 구슬리, 김국현과 함께 얘기하는 닷넷의 로드맵

(http://go.microsoft.com/?linkid=8167494) 시청 소감입니다. ^^

ASP .NET의 아버지라 불리는 스콧 구슬리이지만 역시 전반적인 내용은 지난 11월엔가 출시된 닷넷 스튜디오 2008(정식 한글판은 올해 2월중 출시예정)과 새로운 .NET Framework 3.5의 LINQ에 대한 홍보에 중점을 두고 있었습니다.

다만 개발자, 매니저, 블로거로서의 스콧 구슬리에 대한 견해를 묻고 답을 듣는 시간이 유익했습니다.

인상적이었던것은 스콧이 생각하는 아키텍트가 갖춰야할 소양, 매니저로의 팀을 이끌어가는 방식, 개발 방법론, 블로거로서의 생각등 스콧 개인의 이력에 대한 인터뷰가 인상 깊었습니다.

또한 닷넷 스튜디오 2008의 경우 AJAX 및 Silverlight 개발을 위한 javascript 인텔리센스와 디버깅, 특히 css styler에 대한 데모가 제 시선을 사로잡았습니다. 웹 개발의 거의 모든 부분을 이제 스튜디오의 통합 개발 환경안에서 할 수 있겠구나 하는 느낌이 들었습니다.

.NET Framework 3.5에서 새로 추가된 LINQ에 대한 데모도 신선했으며, 질문 시간에 있었던 LINQ에서 자동 생성되는 SQL의 성능문제에 대한 개발자의 질문도 무척 예리했습니다. 개인적인 느낌으로 스콧이 저장 프로시저를 언급하며 질문에 대한 답변을 하는 부분은 약간 궁색하다는 생각이 들었습니다.

LINQ로 인해 많은 개발자들이 DB와 연동된 어플 개발시 많은 도움을 받겠지만, 성능을 희생하는 경우가 생길 수도 있겠구나 하는 생각이 들었습니다. 그러나, LINQ는 DB외의 구조화된 데이타들(예 : XML)도 다룰수 있는 일관된 방법을 제공한다는 점, 또한 그 결과를 다른 가공없이 바로 뷰(리스트,그리드)에 연결할 수 있다는 점에서 무척 획기적이라 할 수 있을것 같습니다.  

그리고 지난 11월의 Devdays에 언급되지 않았던 새로운 소식인 .NET Framework의 소스 공개에 대한 이야기가 있었는데, 무척 기분 좋은 소식이었습니다. 아쉽게도 컴파일 가능한 소스 자체가 아니라 dll의 디버깅 정보를 활용한 소스 공개라는 점이 아쉽지만 (^^; customized 된 .NET Framework 배포는 문제가 있겠지요?! ㅋㅋ) 소스 정보가 포함된 디버깅용 dll을 통해 .NET Framework의 내부를 살펴볼 수 있다는 것은 멋진 소식이라 생각됩니다. 알려진 소식통에 의하면 현재 모든 Framework의 소스가 공개된것은 아니라고 합니다. 하지만 계속 확대할 것이라 하니 기쁜 소식입니다.

사용자 삽입 이미지
  
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : .NET
Track this back : http://www.codeforum.net/blog/pitoosung/trackback/176

name    password    homepage
 hidden


리눅스 메모리 관리 - "왜? Free RAM이 거의 남아있지 않을까?"
출처 : Linux Memory Management or 'Why is there no free RAM?'
Revision 2.3
Copyright 2004 sapphirecat. The text of this post is licensed under a Creative Commons License.

의 내용을 번역한 것입니다.


항목

메모리 관리 Overview
x86 아키텍쳐에서의 불가사의한 880MB 제한
top 결과중 VIRT,RES,SHR 사이의 차이점
buffers 와 cache의 다른점
커널 2.6의 Swappiness

1. 메모리 관리 Overview
1. Overview of memory management


'top'같은 전통적인 유닉스 도구들은 종종 시스템이 잠깐동안 구동된 후 놀랄만큼 적은 양의 Free Memory를 보고하곤 한다. 예를 들어 약 3시간의 uptime후 내가 이 글을 쓰고 있는 머신은 512MB RAM를 가지고 있음에도, 60MB 이하의 free memory를 보고하고 있다. 모두 어디로 가버린걸까?
Traditional Unix tools like 'top' often report a surprisingly small amount of free memory after a system has been running for a while. For instance, after about 3 hours of uptime, the machine I'm writing this on reports under 60 MB of free memory, even though I have 512 MB of RAM on the system. Where does it all go?

사용된 것중 가장 많이 차지하는 것이 디스크 캐쉬이다. 현재 290MB를 넘고 있다. 이것은 top에서 "cached"로 나타난다. Cached 메모리는 실행중인(또는 새롭게 시작된) 프로그램이 메모리가 필요하다면 바로 대체될 수 있다는 점에서 본질적으로는 free memory이다.  
The biggest place it's being used is in the disk cache, which is currently over 290 MB. This is reported by top as “cached”. Cached memory is essentially free, in that it can be replaced quickly if a running (or newly starting) program needs the memory.

리눅스가 디스크 캐쉬에 그렇게 많은 메모리를 사용하는 이유는 그렇지 않으면 RAM이 낭비되기 때문이다. 캐쉬를 유지한다는 것은 만약 어떤 프로그램이 같은 데이타를 다시 필요로 할때 메모리에 해당 캐쉬가 존재할 가능성이 높다는 것을 의미한다. 메모리로 부터 정보를 Fetch하는 것이 하드 디스크로 부터 얻는 것보다 대략 1000배정도는 더 빠르다. 만약 캐쉬에서 찾지 못한다면, 어차피 하드 디스크에서 읽혀질 필요가 있다, but in that case nothing has been lost in time(^^; ? 그러나 그 경우는 과거에 한번도 읽혀진 적이 없다는 것이다)
The reason Linux uses so much memory for disk cache is because the RAM is wasted if it isn't used. Keeping the cache means that if something needs the same data again, there's a good chance it will still be in the cache in memory. Fetching the information from there is around 1,000 times quicker than getting it from the hard disk. If it's not found in the cache, the hard disk needs to be read anyway, but in that case nothing has been lost in time.

얼마나 많은 메모리가 어플리케이션이 사용 가능한 실제적인 여유공간인지에 대한 보다 정확한 판단을 위해 "free -m" 명령을 실행해 보아라.
To see a better estimation of how much memory is really free for applications to use, run the command: Code: free -m

-m 옵션은 메가바이트로 표시할 것을 가르킨다. 결과값은 아래와 같이 나타날 것이다.
The -m option stands for megabytes, and the output will look something like this: Code:

           total       used       free     shared    buffers     cached
Mem: 503 451 52 0 14 293
-/+ buffers/cache: 143 360
Swap: 1027 0 1027

-/+ buffers/cache 줄은 어플레케이션들 입장에서의 얼마나 많은 메모리가 사용되고 자유로운가를 보여준다. 일반적으로 만약 swap이 거의 사용되지 않는다면, 메모리 사용량은 성능에 전혀 영향을 주지 않는다.
The -/+ buffers/cache line shows how much memory is used and free from the perspective of the applications. Generally speaking, if little swap is being used, memory usage isn't impacting performance at all.

내 Machine에는 512MB의 메모리가 있다고 했었다. 그러나 free 명령에 의하면 503MB(역주 : total)가 이용가능하다고 되어 있다. 이는 주로 커널은 swapped 될 수 없기 때문으로 커널이 차지하는 메모리는 결코 free가 될 수 없다. 또한 그중에는 하드웨어에 의하거나 하드웨어를 위한 시스템 아키텍처와 밀접한 다른 목적의 메모리 영역도 있을 수 있다.
Notice that I have 512 MB of memory in my machine, but only 503 is listed as available by free. This is mainly because the kernel can't be swapped out, so the memory it occupies could never be freed. There may also be regions of memory reserved for/by the hardware for other purposes as well, depending on the system architecture.

2. x86 아키텍쳐에서의 불가사의한 880MB 제한
2. The mysterious 880 MB limit on x86


기본적으로, 리눅스 커널은 low 메모리에서만 실행되고 low 메모리만을 관리한다. 이는 page 테이블 관리를 조금은 더 쉽게한다, 이는 다시말해 좀더 빠른 메모리 엑세스가 가능하게 만든다. ^^; ???
By default, the Linux kernel runs in and manages only low memory. This makes managing the page tables slightly easier, which in turn makes memory accesses slightly faster. The downside is that it can't use all of the memory once the amount of total RAM reaches the neighborhood of 880 MB. This has historically not been a problem, especially for desktop machines.

1GB 또는 그이상의 머신에서 모든 RAM을 사용할 수 있기 위해서는 kernel을 제 컴파일 할 필요가 있다. 'make menuconfig'(또는 config가 제공되는 곳) 를 실행하고 다음의 옵션을 설정해야 한다.
Processor Type and Features --> High Memory Support --> (X) 4GB
To be able to use all the RAM on a 1GB machine or better, the kernel needs recompiled. Go into 'make menuconfig' (or whichever config is preferred) and set the following option: Code: Processor Type and Features —→ High Memory Support —→ (X) 4GB

이것은 커널 2.4와 2.6 둘다 적용되어 있다. High 메모리 지원을 활성화 하면 이론적으로는 약간의 엑세스 저하가 일어날수 있다. 그러나 Joseph_sys 와 log에 따르면, 실제적인 차이는 거의 없다.
This applies both to 2.4 and 2.6 kernels. Turning on high memory support theoretically slows down accesses slightly, but according to Joseph_sys and log, there is no practical difference.

3. top 결과중 VIRT,RES,SHR 사이의 차이점
3. The difference among VIRT, RES, and SHR in top output


VIRT는 프로세스의 가상 크기를 가르킨다. 이것은 해당 프로세스가 실제적으로 사용하는 메모리의 총량으로, 프로세스에 맵핑된 메모리(예로 X server를 위한 비디오 카드의 RAM), 프로세스에 맵핑된 디스크상의 파일들(대부분이 주로 공유 라이브러리들), 그리고 다른 프로세스들과 공유하는 메모리이다. VIRT는 프로그램이 현재 순간에 얼마나 많은 메모리에 접근할 수 있는지를 나타낸다.
VIRT stands for the virtual size of a process, which is the sum of memory it is actually using, memory it has mapped into itself (for instance the video card's RAM for the X server), files on disk that have been mapped into it (most notably shared libraries), and memory shared with other processes. VIRT represents how much memory the program is able to access at the present moment.

RES는 상주 크기를 나타낸다. 이는 프로세스가 소비하는 실제 물리적 메모리의 양이 얼마인지를 정확히 나타낸것이다.(이는 또한 바로 %MEM 컬럼과 일치한다.) 이는 대부분의 프로그램들이 C 라이브러리에 의존적이기 때문에 실제로 항상 VIRT 크기보다는 작을 것이다.
RES stands for the resident size, which is an accurate representation of how much actual physical memory a process is consuming. (This also corresponds directly to the %MEM column.) This will virtually always be less than the VIRT size, since most programs depend on the C library.

SHR은 VIRT 크기중 얼마만큼이 실제 공유가능한(메모리 또는 라이브러리들)가를 나타낸다. 라이브러리인 경우 이는 해당 라이브러리 전체가 상주한다를 것을 의미하지는 않는다. 예를 들어, 만약 한 프로그램이 한 라이브러리속의 일부 함수들만을 사용한다고 하면, 그것의 전체 라이브러리가 맵핑되고 VIRT와 SHR에 계수되겠지만, 사용되는 함수들을 포함하는 라이브러리 파일의 부분만이 실제적으로 로드되고 이는 RES로 잡힌다.
SHR indicates how much of the VIRT size is actually sharable (memory or libraries). In the case of libraries, it does not necessarily mean that the entire library is resident. For example, if a program only uses a few functions in a library, the whole library is mapped and will be counted in VIRT and SHR, but only the parts of the library file containing the functions being used will actually be loaded in and be counted under RES.

4. buffers 와 cache의 다른점
4. The difference between buffers and cache


버퍼는 특정한 블럭 디바이스와 관련되어 있으며, in-flight 페이지 트랙킹 뿐만아니라 파일시스템 메타데이터 캐싱을 포함한다. 캐쉬는 (^^;)parked 파일 데이타만을 포함한다. 즉 버퍼는 무슨 디렉토리이며 파일 권한은 어떻게 되고, 어떤 메모리가 특정 블럭 디바이스에 대해 쓰여지거나 읽혔는지를 유지하는 반면 캐쉬는 단지 파일의 내용 그 자체만을 포함한다는 것이다.
Buffers are associated with a specific block device, and cover caching of filesystem metadata as well as tracking in-flight pages. The cache only contains parked file data. That is, the buffers remember what's in directories, what file permissions are, and keep track of what memory is being written from or read to for a particular block device. The cache only contains the contents of the files themselves.

이 절의 내용에 대한 수정과 추가를 환영한다. 나는 이런 결론에 도달하기 위해 /proc/meminfo가 어떻게 생성되는지를 추적함으로서 추론을 완성할 수 있었다.
Corrections and additions to this section welcome; I've done a bit of guesswork based on tracing how /proc/meminfo is produced to arrive at these conclusions.

5. 커널 2.6의 Swappiness
5. Swappiness (2.6 kernels)


2.6 이후로 메모리가 가득 찯을때 캐쉬된것들을 디스크로 옮기는 스와핑이 얼마나 많이 이루어질지를 조율하는 방법이 생겼다.
Since 2.6,  there has been a way to tune how much Linux favors swapping out to disk compared to shrinking the caches when memory gets full.

ghoti의 추가분 : 어떤 어플리케이션이 메모리를 필요로하고 모든 RAM이 가득 찯다면, 커널은 일부 메모리를 free로 하기위한 두가지 방법을 갖는다. 가장 오래된 데이타를 제거함으로서 RAM에 있는 디스크 캐쉬를 줄이거나 또는 프로그램에서 거의 사용되지 않은 부분(pages)을 디스크의 swap 파티션으로 옮기는 것이다. 어떤 방법이 보다 효과적인지를 예측하는 것은 쉽지 않다. 커널은 활성도의 최근 이력에 근거하여, 주어진 순간에 두 방법의 적용정도를 대략적으로 측정함으로서 한가지를 선택한다.
ghoti adds: When an application needs memory and all the RAM is fully occupied, the kernel has two ways to free some memory at its disposal: it can either reduce the disk cache in the RAM by eliminating the oldest data or it may swap some less used portions (pages) of programs out to the swap partition on disk. It is not easy to predict which method would be more efficient. The kernel makes a choice by roughly guessing the effectiveness of the two methods at a given instant, based on the recent history of activity.

2.6 커널 이전에, 사용자가 계산에 영향을 주는 수단이 없어 커널이 종종 잘못된 선택을 하고 이로 인해 헛수고와 포퍼먼스 저하를 가져오는 상황이 있을 수 있었다. 커널 2.6에 swappiness의 추가로 이것이 변했다. ghoti에게 감사한다!
Before the 2.6 kernels, the user had no possible means to influence the calculations and there could happen situations where the kernel often made the wrong choice, leading to thrashing and slow performance. The addition of swappiness in 2.6 changes this. Thanks, ghoti!

Swappiness는 0에서 100까지의 값을 가지는데 스와핑과 캐쉬 free사이의 밸런스를 변화시킨다. 100이면 커널은 항상 비활성화된 페이지들을 찾아 디스크에 스왑할 것이다. 그밖의 경우, swapout(역주:비활성 페이지의 디스크 스왑)이 일어날지의 여부는 얼마나 많은 어플리케이션 메모리가 사용중이며, 캐싱하고 있는 발견중이고 제거중인 비활성화 아이템이 얼마나 적은가에 따른다.  
Swappiness takes a value between 0 and 100 to change the balance between swapping applications and freeing cache. At 100, the kernel will always prefer to find inactive pages and swap them out; in other cases, whether a swapout occurs depends on how much application memory is in use and how poorly the cache is doing at finding and releasing inactive items.

기본 swappiness값은 60이다. ???...(0값은 어플리케이션이 원하는 메모리를 캐시를 줄여 RAM의 단편으로 할 수 있도록하는 동작을 많이 하도록 하는것이다.???)  디스크의 spin down이 가능한 laptop의 경우 20또는 그 이하의 값을 추천한다.
The default swappiness is 60. A value of 0 gives something close to the old behavior where applications that wanted memory could shrink the cache to a tiny fraction of RAM. For laptops which would prefer to let their disk spin down, a value of 20 or less is recommended.

sysctl 에 따라, 다음 명령중 하나로 swappiness의 값을 실행중에 설정 가능하다.
# sysctl -w vm.swappiness=30
# echo 30 > /proc/sys/vm/swappiness
As a sysctl, the swappiness can be set at runtime with either of the following commands:
Code:
# sysctl -w vm.swappiness=30
# echo 30 >/proc/sys/vm/swappiness

시스템 시작시의 기본값은 /etc/sysctl.conf에 설정할 수 있다.
The default when Gentoo boots can also be set in /etc/sysctl.conf:
Code:
# Control how much the kernel should favor swapping out applications (0-100)
vm.swappiness = 30

어떤 패치들은 커널이 적당한 swappiness level를 자동으로 조절하는 것을 허락한다. 이는 사용자 값 설정을 유지하지 않을 수도 있다.
Some patchsets allow the kernel to auto-tune the swappiness level as it sees fit; they may not keep a user-set value.

사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : 시스템관리
Track this back : http://www.codeforum.net/blog/pitoosung/trackback/175
Commented by hyungju at 2009/11/23 17:41  r x
Thanks for your kind translation to Korean. Thanks to you, I saved my time in understanding fields in Top.

name    password    homepage
 hidden


서버가 안정을 되찾은것 같습니다.
지난 10~14일 사이 극심한 불안을 보이던 서버가 14일 이후의 최종 점검 조치이후로 이상 조짐없이 안정을 유지하고 있습니다.

가끔씩 갑자기 리부팅 되는 현상이 있어, CPU와 메모리 일부를 교체한뒤로 몇일간은 오히려 시스템이 더욱더 불안해져 버렸습니다. 리부팅이 더 잦아졌고, 심지어 몇번씩 다운되기 까지 했습니다.

리눅스의 Free Memory Size에 대한 오해(?) [곧 시간이되면 다루도록 하겠습니다] 때문에 메모리가 부족해서 그런가? 하며, 메모리 확장을 심각히 고민해 보기까지 했습니다.

그러나, 14일의 최종 조치이후, 그런일은 발생하지 않았고, 덕분에 확실치는 않지만 어느정도 원인을 파악할 수 있었습니다.

처음 가끔씩 이유없이 시스템이 리부팅 될때의 시스템은 Intel 서버보드 440GX+, 펜3 700Mhz Dual CPU와 ECC 메모리 1GB로 구성되어 있었습니다. 가끔씩 커널에서 CPU에서 메모리에 쓰는데 문제가 있는것 같다는 Warning메시지가 떴었지만, 커널 메시지도 무시해도 되는듯 애매하고, 겉으로 보기에 아무 이상이 없는 것 같았기 때문에, ECC 메모리여서 그런가 하고 무시했었습니다. 하지만 시스템 서비스 접속중 갑자기 접속이 되지 않았다가, 얼마뒤 다시 접속이 되고 하던 이유가 시스템이 자동으로 리부팅 된다는 사실을 알고, ECC 메모리중 1개를 교체하면서 펜3 850Mhz Dual CPU로 업그레이드 까지 겸하였습니다. 그런데, 그 뒤로 시스템이 다운되는등 더욱 심각해 졌던 것입니다.

급기야, 14일 시스템이 다운되어 보니, 이번에는 처음으로 커널 패닉이 난것을 확인할 수 있었습니다. 결국, ECC메모리 전체를 일반 SDRAM 1.25GB로, 그리고 CPU 중 하나를 교체하였습니다.

이 과정에서 서버보드는 빠른 부팅이 중요한게 아니며, 안정성을 위해 BIOS의 Self Test를 할 수 있을 만큼 해야된다는 것을 깨닫는 계기가 되었습니다.

처음 CPU 문제로 의심하고 CPU Dual을 Single로 해보기로 결정하고 한쪽 슬롯의 CPU를 제거하고 CPU 터미네이터를 장착하였습니다. 그리고 모든 ECC메모리를 여기 저기서 끌어모은 일반 SDRAM으로 교체하였습니다. 그리고 시스템 On..... 헉! 그런데 가슴이 철렁하는 일이 일어났습니다. 커널 이미지를 읽어들이자 마자, 패닉이 발생하는게 아닙니까?!

곧 이유를 알 수 있었습니다. BIOS에서 Extended 메모리 Test를 Yes로 해주고 부팅하여 보았더니 장착한 메모리 1.25GB를 잘 인식하였지만 테스트시 약 500MB 정도를 인식하고는 그냥 지나치더니 그 이상 진행하지 않는 것이였습니다.

메모리중에 에러가 있는게 있나 하고 난감하였습니다만, 여러번의 시행 착오끝에 메모리에는 문제가 없고 Bank 순서를 바꾸니 Test 까지 잘 통과하게 되었습니다. (처음 256M+256M+512M+256M 이런식으로 장착되어 있었을 겁니다. 문제가 생긴후 512M+256M+256M+256M로 해주었더니 통과하였습니다.)
그리고 부팅을 계속하니 정상적으로 부팅되었습니다.

저는 처음 접하는 경험이었습니다. 아하 이럴 수도 있구나, 메모리 크기가 잘 인식되었다고 끝나는게 아니구나, Test까지 해주어야 겠구나 하고 말입니다. 다만 뱅크 장착 순서에 따라 테스트가 통과하는것은 대략 난감입니다만 ^^;

한고비 넘기고 그럼 혹시 ECC 메모리 일때도 사이즈만 잘 표시되었을 뿐이지 이와 똑같은 상황이었던 걸까? 하는 의심이 들었지만, 더 테스트 해보지는 않았습니다.

이제 설혹 이전 메모리 칩에 에러가 있었다 하더라도, SDRAM으로 교체했으니 괞찮겠지 하고, 다시 빼 두었던 CPU를 장착하였습니다. ㅠ.ㅠ 그런데, 이게 왠일일까요? 이번엔 다시 장착한 CPU가 인식이 되지 않고, 계속 Single로 인식이 되고 CPU2를 사용할 수 없다는 에러 메시자가 출력되는 것이었습니다 ^^; 헉! CPU를 빼낼때 내가 뭘 잘못한 걸까?!

마침 스텝핑이 일치하는 같은 속도의 다른 CPU가 있어 그걸로 바꾸어 주었습니다. ^^; 그러나 여전히 인식이 되지 않았습니다. CPU는 이상이 없다는 생각에 한편으론 안심되었지만, 도대체 왜 이럴까? 하는 맘에 답답하기 그지 없었습니다. 그리고 몇번의 실패뒤 원인을 알아내었습니다.

BIOS의 Processor 부분에서 CPU Reset을 YES로 해주니, 짜안!! CPU가 잘 인식되는 것이었습니다. CPU가 바뀌게(재장착 포함)되면 Reset를 한번씩 해주어야 하나 봅니다.

이렇게 몇번의 고비를 넘어 드디어 안정적인 시스템으로 새롭게 태어났습니다. ^^
이번을 계기로 BIOS의 Self Test가 부팅 시간을 지연하는 불필요한 기능이 아닌, 안정성 확보를 위한 최소한의 기능이라는 것을 느끼게 되었습니다.



사용자 삽입 이미지
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : 시스템관리
Track this back : http://www.codeforum.net/blog/pitoosung/trackback/174

name    password    homepage
 hidden


BLOG main image
피투성의 IT 분투기
 Notice
(2009.11.30) - ㅠ.ㅠ 안녕! 서버 H/W 시스템 교체(서버보드 사망, HP Workstation으로 교체)
(2008.2.2) IP : 195.225.178.29 - 스팸 차단 조치
(2008.1.14) 오후 06:34 ~ 08:07 : 시스템 복구
(2008.1.14) 오전 00:25(?) : 시스템 다운 - 흠 심각하군!
(2008.1.13) 오후 11:31 : 시스템 리부팅됨
(2008.1.13) 시스템 복구 : 오전(?)~오후 1:00
 Category
전체 (148)
프로그래밍 (42)
IT 세상속으로 (42)
세상 엿보기 (26)
지하창고 (18)
책의 향기 (12)
생각의 힘(바둑) (4)
OCR-내가 다 읽어줄께 (1)
두발의 짐승 (2)
지능형 로봇 (1)
 Calendar
«   2008/01   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
 Recent Entries
투명 Display 그리고 Augm... (2)
64bits(x64) Windows OS...
NFS & Eclipse & CDT & In...
행복에 대해 생각하며
Virtual Audio Cable (가...
 Recent Comments
^^ 안녕! 축하축하. 난 아...
피투성 - 03/16
오랜만에들림니다 아이폰...
쭌 - 03/15
Thanks for your kind tra...
hyungju - 2009
정보 감사합니다 덕분에...
허수 - 2009
관리자만 볼 수 있는 댓글...
- 2009
 Recent Trackbacks
내가 생각하는 한의학의...
Life Is Always Emergency
FreeBSD 6.2, 64bit, 메모...
엘레노아의 작업로그
알약 백신 제대로 사용하...
촌철살인
유용한 블로그 툴 몇개..
ENTClic@blog...just anot...
국내의 검색엔진에 등록하...
케이알선의 이야기
 Archive
2010/01
2009/12
2009/07
2008/09
2008/03
 Link Site
00_피투성의 지식창고_00
 Visitor Statistics
Total : 70416
Today : 24
Yesterday : 52
텍스트큐브 배너
Eolin
rss