why ps is wrong?

오늘 kldp 에 ps로 메모리를 확인하려고 하는데 잘 안된다는 질문 내용을 봤다.

https://kldp.org/node/152025

답글을 작성하다가 재미있는 내용을 알게 되어 이곳에도 같이 담아둔다.

 

질문 내용

프로그램 안에서 10 바이트씩 malloc 으로 메모리를 할당했습니다.
그리고 ps -eo user,size,cmd 명령으로 메모리 증가량으로 확인하려고 했지만 전혀 메모리 증가가 안되네요.

왜 그런거죠?

답변

두 가지 이유가 있습니다.

1. 확인하고자 하시는 메모리 증가량이 너무 작습니다.

man ps 에서 size 항목을 찾아봤는데 따로 단위는 안나오네요.
하지만 테스트 해보니 단위가 1K 였습니다.
프로그램을 수정해서 한번에 1M 씩 증가하도록 해봤는데, 증가량이 확인되네요.
할당하는 메모리 크기를 1M 단위로 하신다면 쉽게 증가 내역을 확인하실 수 있습니다.

2. ps 명령은 정확한 메모리 량을 확인하기에는 부족한 유틸리티 입니다.
출처 : http://stackoverflow.com/questions/131303/how-to-measure-actual-memory-u…

ps 명령은 사실 어플리케이션에서 사용하는 정확한 메모리 양을 나타내지 않습니다. 단지 예약된 메모리 양을 나타낼 뿐입니다.
달리 말하면 때에 따라(커널 레벨에서 사용되는 페이지가 공유 되거나 할 경우)변동될 소지가 있다는 것입니다. (예를 들면 여러개의 쓰레드나 동적 라이브러리를 사용하는 경우가 있습니다.)

그리고 만약 정확한 메모리 크기를 확인하고자 하신다면 다른 프로그램을 사용하셔야 합니다. valgrind 가 대표적이죠. 주로 메모리 누수 탐지에 사용되지만 메모리 사용량을 확인할 수도 있습니다.

————————————————————————————

실제로 위에 인용한 스택 오버플로우의 내용 말고도 ps 는 메모리 사용량을 확인하는데 부족하다는 내용의 많은 양의 문서를 확인할 수 있었다.

정확한 메모리 사용량을 확인하고자 한다면, 다음의 링크에 소개된 프로그램을 이용하자.

http://www.binarytides.com/linux-command-check-memory-usage/

Check out system model code

갑자기 노트북 제품 코드를 콘솔로 확인할 수 있지 않을까 싶었다.

찾아보니 dmidecode 라는 명령어가 있었다.

 

내 이동 전용 노트북(한성 컴퓨터 ForceRecon U13s) 은 중국산 저가 노트북에 상표만 붙여서 파는 것으로 알고 있었다. 하지만 실제로 원 모델이 어떤 노트북인지는 확인하지 못했었는데, 이번에 dmidecode 명령으로 알게 되었다.

System Information
Manufacturer: Notebook
Product Name: W310CZ/CZ-T
Version: Not Applicable
Serial Number: Not Applicable
UUID: EFF59000-7695-0000-0000-000000000000
Wake-up Type: Power Switch
SKU Number: Not Applicable
Family: Not Applicable

아래의 링크에 명령어 내용을 정리해 두었다.

http://wiki.pchero21.com/wiki/Dmidecode

Ubuntu Virtual Box Start Error

 

Ubuntu 11.04 Kernel Version

Linux localhost.localdomain 2.6.18-194.32.1.el5 #1 SMP Wed Jan 5 17:53:09 EST 2011 i686 i686 i386 GNU/Linux

환경에서 Virtual Box 를 구동하려고 하니 다음과 같은 에러메시지가 나타났다.

“Failed to start the virtual machine WindowsXP.
Failed to open/create the internal network ‘HostInterfaceNetworking-eth0’ (you might need to modprobe vboxnetflt to make it accessible) (VERR_SUPDRV_COMPONENT_NOT_FOUND).
Please install the virtualbox-ose-dkms package and execute ‘modprobe vboxdrv’ as root (VERR_SUPDRV_COMPONENT_NOT_FOUND).”

이유인즉, 두 개의 모듈 vboxnetflt 와 vboxdrv 이 적재 되지 않아서 발생하는 문제였다.

vboxdrv 의 경우,

$ sudo modprobe vboxdrv

의 명령어로 로딩시킬 수 있었지만, vboxnetflt 모듈의 경우에는 다음의 에러 메시지를 내며 로딩되지 않았다.

jonathan@jonathan-laptop:~$ sudo modprobe vboxnetflt
[sudo] password for jonathan:
FATAL: Error inserting vboxnetflt (/lib/modules/2.6.32-33-generic-pae/updates/dkms/vboxnetflt.ko): Invalid module format

한참을 고민하다가 해결책을 찾았는데, 너무도 간단했다.
다음의 명령어로 모듈을 업로드 할 수 있다.

$ modprobe /lib/modules/2.6.32-33-generic-pae/updates/dkms/vboxnetflt.ko

또한, 매 재부팅시 자동으로 모듈 업로드를 설정하기 위해서, /etc/modules 의 파일을 수정해야 한다.

</etc/modules>

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with “#” are ignored.

lp
vboxdrv
/lib/modules/2.6.32-33-generic-pae/updates/dkms/vboxnetflt.ko

 

 

 

Changing gnome ternimal title on ubuntu linux

그놈 터미널을 사용하던 중, 터미널의 제목이 변경되지 않는 문제점을 발견했다.

평소에는 신경쓰지 않다가 꼭 한번씩 여러개의 창을 동시에 띄워 놓았을때, 헷갈려서 제대로 된 작업 공간을 찾기까지 꽤나 여러번 창을 이동해야 했던 불편함이 있었다.

며칠을 미루다 이번에 변경을 하여 그 내용을 포스팅한다.

간단하다. 위의 그림 처럼 자신의 홈디렉토리 내에 .bashrc 파일의 제일 아래쪽에 아래의 라인을 추가해주면 된다.

PROMPT_COMMAND=’echo -ne “33]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}07″‘