Ubuntu-14.10 공식 지원 기간이 종료된다.
LTS가 아닌 배포 버전들은 9개월의 공식 지원 기간을 가지게 된다. 종료 시기는 2015.07.23.
Ubuntu-14.10 공식 지원 기간이 종료된다.
LTS가 아닌 배포 버전들은 9개월의 공식 지원 기간을 가지게 된다. 종료 시기는 2015.07.23.
오늘 kldp 에 ps로 메모리를 확인하려고 하는데 잘 안된다는 질문 내용을 봤다.
답글을 작성하다가 재미있는 내용을 알게 되어 이곳에도 같이 담아둔다.
질문 내용
프로그램 안에서 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/
갑자기 노트북 제품 코드를 콘솔로 확인할 수 있지 않을까 싶었다.
찾아보니 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
아래의 링크에 명령어 내용을 정리해 두었다.
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