天天看點

C寫個吃記憶體的測試LINUX 系統可用記憶體持續減少的原因

c 記憶體測試

<code>01</code>

<code>#include &lt;stdio.h&gt;</code>

<code>02</code>

<code>#include &lt;stdlib.h&gt;</code>

<code>03</code>

<code>#include &lt;unistd.h&gt;</code>

<code>04</code>

<code>#include &lt;string.h&gt;</code>

<code>05</code>

<code>06</code>

<code>main( </code><code>int</code> <code>argc, </code><code>char</code> <code>** argv )</code>

<code>07</code>

<code>{</code>

<code>08</code>

<code>        </code><code>char</code> <code>* ptest=0;</code>

<code>09</code>

<code>        </code><code>long</code> <code>isize;</code>

<code>10</code>

<code>        </code><code>if</code><code>( 2 == argc ){</code>

<code>11</code>

<code>                </code><code>isize = </code><code>atoi</code><code>( argv[1] );</code>

<code>12</code>

<code>        </code><code>}</code>

<code>13</code>

<code>        </code><code>else</code><code>{</code>

<code>14</code>

<code>                </code><code>printf</code><code>(</code><code>"usage: eatmem &lt;size&gt;\n"</code><code>;</code>

<code>15</code>

<code>                </code><code>return</code> <code>1;</code>

<code>16</code>

<code>17</code>

<code>//        if( null != ( ptest = (char*) malloc( isize*sizeof(char) )))</code>

<code>18</code>

<code>        </code><code>if</code><code>( null != ( ptest = </code><code>new</code> <code>char</code><code>[ isize ] ))</code>

<code>19</code>

<code>                </code><code>printf</code><code>( </code><code>"eat memory %ld\n"</code><code>, isize );</code>

<code>20</code>

<code>        </code><code>else</code>

<code>21</code>

<code>                </code><code>printf</code><code>( </code><code>"no such more memory!\n"</code> <code>);</code>

<code>22</code>

<code>        </code><code>while</code><code>(1){</code>

<code>23</code>

<code>                </code><code>memset</code><code>(ptest,0,isize);</code>

<code>24</code>

<code>                </code><code>sleep(10);</code>

<code>25</code>

<code>        </code><code>};</code>

<code>26</code>

<code>}</code>

先檢視系統的空閑記憶體 , 約 1.8g

# free

             total       used       free     shared    buffers     cached

mem:       2061652     194896    1866756          0      13872      23648

-/+ buffers/cache:     157376    1904276

swap:      4096312     141040    3955272

運作 eatmem 這個程式, 吃掉500m

./eatmem 500000000 &amp; 

再看系統的空閑記憶體, 少了500m 左右.

mem:       2061652     684476    1377176          0      14024      23648

-/+ buffers/cache:     646804    1414848

swap:      4096312     141036    3955276

退出eatmem 再看, 記憶體幾乎都回來了.

[root@l149 root]# free

mem:       2061652     195600    1866052          0      14064      23648

-/+ buffers/cache:     157888    1903764

又做了一下試驗....寫個2g 的檔案試試...

mem:       2061652     197080    1864572          0      14276      23648

-/+ buffers/cache:     159156    1902496

[root@l149 root]# dd if=/dev/zero of=2000m.file bs=10485760 count=200

200+0 records in

200+0 records out

mem:       2061652    2043584      18068          0      14332    1874308

-/+ buffers/cache:     154944    1906708

嘿嘿, 一寫完檔案, free memory 就沒有了.

有趣的是, 把這個檔案一删除, free memory 就又回來了.

繼續閱讀