2013-02-28 3 views
1

프로세스가 실행 된 후 ~ 140MB까지 시스템 메모리가 소모되었지만 프로세스는 ~ 8MB 밖에 걸리지 않았습니다. 이 프로세스 (openttd dedicaded 서버)는 완전히 독립형입니다 (다른 프로세스와 통신하지 않습니다).사용 된 메모리 및 프로세스 메모리가 일치하지 않음 (140MB 대 8MB)

(RES으로 분류)

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                           
15801 www-data 17 0 1320m 173m 4036 S 1.3 17.4 0:54.75 java                            
1518 ejabberd 15 0 99684 54m 3724 S 0.0 5.5 18:05.64 beam                            
7917 www-data 15 0 124m 47m 2204 S 0.0 4.8 0:02.43 plackup                           
8039 www-data 15 0 123m 46m 2204 S 0.0 4.7 0:02.38 plackup                           
32439 www-data 15 0 116m 42m 2812 S 0.0 4.2 0:42.54 plackup                           
29708 mysql  15 0 170m 38m 7556 S 0.0 3.9 187:51.36 mysqld                           
32247 www-data 15 0 141m 38m 3376 S 0.0 3.8 0:08.01 plackup                           
6025 www-data 15 0 176m 37m 4532 S 0.0 3.7 0:06.17 php-cgi                           
3248 www-data 15 0 172m 33m 4544 S 0.0 3.4 0:10.55 php-cgi                           
3591 www-data 15 0 123m 32m 3080 S 0.0 3.3 9:09.46 plackup                           
32303 www-data 15 0 250m 32m 6364 S 0.3 3.3 17:54.92 mongod                           
24324 send2me 16 0 53340 14m 3088 S 0.0 1.5 0:03.00 perl                            
26584 bind  25 0 93800 11m 2352 S 0.0 1.1 0:00.17 named                           
20045 root  15 0 110m 9288 6876 S 0.0 0.9 2:18.20 ispmgr                           
15574 www-data 18 0 144m 9168 5732 S 0.0 0.9 0:00.07 php-cgi                           
30220 www-data 15 0 37420 9148 2936 S 0.0 0.9 1:29.11 websockify.py                         
9935 root  16 0 83864 3688 2856 S 0.0 0.4 0:00.02 sshd 
,536,913,632 전에

free -m 
      total  used  free  shared buffers  cached 
Mem:   1000  777  222   0   0   0 
-/+ buffers/cache:  777  222 
Swap:   0   0   0 

pmap 18428 -x 
18428: /var/www/ttd-server/openttd_1.2.3 -s null -m null -x -c /var/www/ttd-server /configuration/preload/openttd.cfg -D 
Address   Kbytes  RSS Dirty Mode Mapping 
0000000000400000  0 2948  0 r-x-- openttd_1.2.3 
0000000000aee000  0  64  48 rw--- openttd_1.2.3 
0000000000afe000  0  588  584 rw--- [ anon ] 
000000001c66d000  0 2516 2516 rw--- [ anon ] 
00002ba83f5a7000  0  100  0 r-x-- ld-2.11.3.so 
00002ba83f5c5000  0  256  256 rw--- [ anon ] 
00002ba83f7c4000  0  4  4 r---- ld-2.11.3.so 
00002ba83f7c5000  0  4  4 rw--- ld-2.11.3.so 
00002ba83f7c6000  0  4  4 rw--- [ anon ] 
00002ba83f7c7000  0  380  0 r-x-- libstdc++.so.6.0.13 
00002ba83f8bd000  0  0  0 ----- libstdc++.so.6.0.13 
00002ba83fabd000  0  28  28 r---- libstdc++.so.6.0.13 
00002ba83fac4000  0  8  8 rw--- libstdc++.so.6.0.13 
00002ba83fac6000  0  4  4 rw--- [ anon ] 
00002ba83fadb000  0  52  0 r-x-- libpthread-2.11.3.so 
00002ba83faf2000  0  0  0 ----- libpthread-2.11.3.so 
00002ba83fcf1000  0  4  4 r---- libpthread-2.11.3.so 
00002ba83fcf2000  0  4  4 rw--- libpthread-2.11.3.so 
00002ba83fcf3000  0  8  8 rw--- [ anon ] 
00002ba83fcf8000  0  112  0 r-x-- libm-2.11.3.so 
00002ba83fd78000  0  0  0 ----- libm-2.11.3.so 
00002ba83ff78000  0  4  4 r---- libm-2.11.3.so 
00002ba83ff79000  0  4  4 rw--- libm-2.11.3.so 
00002ba83ff7a000  0  460  0 r-x-- libc-2.11.3.so 
00002ba8400d3000  0  0  0 ----- libc-2.11.3.so 
00002ba8402d2000  0  16  16 r---- libc-2.11.3.so 
00002ba8402d6000  0  4  4 rw--- libc-2.11.3.so 
00002ba8402d7000  0  16  16 rw--- [ anon ] 
00002ba8402dc000  0  16  0 r-x-- libgcc_s.so.1 
00002ba8402f2000  0  0  0 ----- libgcc_s.so.1 
00002ba8404f1000  0  4  4 rw--- libgcc_s.so.1 
00002ba8404f2000  0  104  104 rw--- [ anon ] 
00002ba848565000  0  284  284 rw--- [ anon ] 
00007fff900e4000  0  44  44 rw--- [ stack ] 
00007fff901fd000  0  8  0 r-x-- [ anon ] 
ffffffffff600000  0  0  0 ----- [ anon ] 
---------------- ------ ------ ------ 
total kB   162884 8048 3952 

프로세스 맵

free -m 
      total  used  free  shared buffers  cached 
Mem:   1000  913   86   0   0   0 
-/+ buffers/cache:  913   86 
Swap:   0   0   0 

후 상단 전 후 (RES으로 분류) 10

상단 :

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                           
15801 www-data 17 0 1320m 173m 4036 S 1.3 17.4 0:53.77 java                            
1518 ejabberd 15 0 99684 54m 3724 S 0.0 5.5 18:05.62 beam                            
7917 www-data 15 0 124m 47m 2204 S 0.0 4.8 0:02.42 plackup                           
8039 www-data 15 0 123m 46m 2204 S 0.0 4.7 0:02.37 plackup                           
32439 www-data 15 0 116m 42m 2812 S 0.0 4.2 0:42.54 plackup                           
29708 mysql  15 0 170m 38m 7556 S 0.0 3.9 187:51.34 mysqld                           
32247 www-data 15 0 141m 38m 3376 S 0.0 3.8 0:08.01 plackup                           
6025 www-data 15 0 176m 37m 4532 S 0.0 3.7 0:06.17 php-cgi                           
3248 www-data 15 0 172m 33m 4544 S 0.0 3.4 0:10.55 php-cgi                           
3591 www-data 15 0 123m 32m 3080 S 0.0 3.3 9:09.44 plackup                           
32303 www-data 15 0 250m 32m 6364 R 0.3 3.3 17:54.61 mongod                           
24324 send2me 16 0 53340 14m 3088 S 0.0 1.5 0:03.00 perl                            
26584 bind  25 0 93800 11m 2352 S 0.0 1.1 0:00.17 named                           
20045 root  15 0 110m 9288 6876 S 0.0 0.9 2:18.19 ispmgr                           
15574 www-data 18 0 144m 9168 5732 S 0.0 0.9 0:00.07 php-cgi                           
30220 www-data 15 0 37420 9148 2936 S 0.0 0.9 1:29.11 websockify.py           

18428 www-data 16 0 151m 8048 4096 R 0.0 0.8 0:00.30 openttd_1.2.3 

9935 root  16 0 83864 3688 2856 S 0.0 0.4 0:00.02 sshd 

가상 물리 메모리에있는 프로세스의 메모리, 그런데 왜 것 같은데? 예를 들어 자바 프로세스는 1320MB의 가상 메모리를 가졌지 만 173MB의 실제 메모리 (RES로 매스된다)를 소비했지만, openttd 프로세스는 RES = 8MB이지만 136MB의 실제 메모리를 소비합니다. 이것이 무슨 뜻입니까?

UPD.

내 서버는 OpenVZ를 기반으로합니다.
Openttd는 단일 스레드 모드로 컴파일됩니다.
실제 PC에는 문제가 없습니다.

ulimit를 -a

core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 16382 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 128 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) unlimited 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 
+0

openttd가 공유 메모리의 일부 블록에 연결되어 있습니까? –

+0

openttd 소스가 shm * 함수를 호출하지 않기 때문에 그렇게 생각하지 않습니다. 나는 뭔가를 놓칠지도 모른다. – caiiiycuk

+0

mmap?/dev/shm에 파일에 첨부 된 프로세스입니까? –

답변

0

오픈 VZ의 메모리 모델에 문제가 있습니다. PC에서 malloc (128 * 1024 * 1024)을 호출하면 총 사용 가능 메모리가 소모되지 않거나 응용 프로그램에서 실제로 사용되지 않기 때문에 약간 소모됩니다. 하지만 OpenVZ에서 malloc을 호출하면 즉시 128MB의 사용 가능한 메모리가 소모됩니다. 따라서 OpenVZ를 프로그래밍 할 때는 사용하지 않는 엄청난 공간을 미리 할당해서는 안됩니다.