MOH*_*MED 0 c c++ linux memory memory-management
我为内存泄漏压力开发了一个小应用程序:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int period = 0;
int size = 40000001;
char *buf = NULL;
if (argc > 1) period = atoi(argv[1]);
if (period == 0) period = 21;
for (;;) {
buf = malloc(size);
if (buf == NULL) printf ("malloc return NULL\n");
sleep(period);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
应用程序每20秒进行一次~40M的内存分配(无空闲).我的系统内存是~256M.
我使用top命令检查了压力应用程序消耗的内存:
$top | grep "stress"
873 5689 root S 39892 16% 0% ./stress_test
873 5689 root S 39892 16% 0% ./stress_test
873 5689 root S 39892 16% 0% ./stress_test
873 5689 root S 78956 31% 0% ./stress_test
873 5689 root S 78956 31% 0% ./stress_test
873 5689 root S 78956 31% 0% ./stress_test
873 5689 root S 78956 31% 0% ./stress_test
873 5689 root S 78956 31% 0% ./stress_test
873 5689 root S 115m 47% 0% ./stress_test
873 5689 root S 115m 47% 0% ./stress_test
873 5689 root S 115m 47% 0% ./stress_test
873 5689 root S 115m 47% 0% ./stress_test
873 5689 root S 153m 62% 0% ./stress_test
873 5689 root S 153m 62% 0% ./stress_test
873 5689 root S 153m 62% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 153m 62% 0% ./stress_test
873 5689 root S 191m 77% 0% ./stress_test
873 5689 root S 191m 77% 0% ./stress_test
873 5689 root S 191m 77% 0% ./stress_test
873 5689 root S 191m 77% 0% ./stress_test
873 5689 root S 229m 93% 0% ./stress_test
873 5689 root S 229m 93% 0% ./stress_test
873 5689 root S 229m 93% 0% ./stress_test
873 5689 root S 229m 93% 0% ./stress_test
873 5689 root S 267m 108% 0% ./stress_test
873 5689 root S 267m 108% 0% ./stress_test
873 5689 root S 267m 108% 0% ./stress_test
873 5689 root S 267m 108% 0% ./stress_test
873 5689 root S 305m 124% 0% ./stress_test
873 5689 root S 305m 124% 0% ./stress_test
873 5689 root S 305m 124% 0% ./stress_test
873 5689 root S 305m 124% 0% ./stress_test
873 5689 root S 305m 124% 0% ./stress_test
873 5689 root S 344m 139% 0% ./stress_test
873 5689 root S 344m 139% 0% ./stress_test
873 5689 root S 344m 139% 0% ./stress_test
873 5689 root S 344m 139% 0% ./stress_test
873 5689 root S 382m 155% 0% ./stress_test
873 5689 root S 382m 155% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 382m 155% 0% ./stress_test
873 5689 root S 382m 155% 0% ./stress_test
873 5689 root S 420m 170% 0% ./stress_test
873 5689 root S 420m 170% 0% ./stress_test
873 5689 root S 420m 170% 0% ./stress_test
873 5689 root S 458m 185% 0% ./stress_test
873 5689 root S 458m 185% 0% ./stress_test
873 5689 root S 458m 185% 0% ./stress_test
873 5689 root S 458m 185% 0% ./stress_test
873 5689 root S 496m 201% 0% ./stress_test
873 5689 root S 496m 201% 0% ./stress_test
873 5689 root S 496m 201% 0% ./stress_test
873 5689 root S 496m 201% 0% ./stress_test
873 5689 root S 534m 216% 0% ./stress_test
873 5689 root S 534m 216% 0% ./stress_test
873 5689 root S 534m 216% 0% ./stress_test
873 5689 root S 534m 216% 0% ./stress_test
873 5689 root S 534m 216% 0% ./stress_test
873 5689 root S 573m 232% 0% ./stress_test
873 5689 root S 573m 232% 0% ./stress_test
873 5689 root S 573m 232% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 573m 232% 0% ./stress_test
873 5689 root S 611m 247% 0% ./stress_test
873 5689 root S 611m 247% 0% ./stress_test
873 5689 root S 611m 247% 0% ./stress_test
873 5689 root S 611m 247% 0% ./stress_test
873 5689 root S 649m 263% 0% ./stress_test
873 5689 root S 649m 263% 0% ./stress_test
873 5689 root S 649m 263% 0% ./stress_test
873 5689 root S 649m 263% 0% ./stress_test
873 5689 root S 687m 278% 0% ./stress_test
873 5689 root S 687m 278% 0% ./stress_test
873 5689 root S 687m 278% 0% ./stress_test
873 5689 root S 687m 278% 0% ./stress_test
873 5689 root S 725m 293% 0% ./stress_test
873 5689 root S 725m 293% 0% ./stress_test
873 5689 root S 725m 293% 0% ./stress_test
873 5689 root S 725m 293% 0% ./stress_test
873 5689 root S 763m 309% 0% ./stress_test
873 5689 root S 763m 309% 0% ./stress_test
873 5689 root S 763m 309% 0% ./stress_test
873 5689 root S 763m 309% 0% ./stress_test
873 5689 root S 763m 309% 0% ./stress_test
873 5689 root S 801m 324% 0% ./stress_test
873 5689 root S 801m 324% 0% ./stress_test
873 5689 root S 801m 324% 0% ./stress_test
873 5689 root S 801m 324% 0% ./stress_test
873 5689 root S 840m 340% 0% ./stress_test
873 5689 root S 840m 340% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 840m 340% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 840m 340% 0% ./stress_test
Mem: 120004K used, 132592K free, 0K shrd, 0K buff, 30076K cached
873 5689 root S 878m 355% 0% ./stress_test
873 5689 root S 878m 355% 0% ./stress_test
873 5689 root S 878m 355% 0% ./stress_test
873 5689 root S 878m 355% 0% ./stress_test
873 5689 root S 916m 370% 0% ./stress_test
873 5689 root S 916m 370% 0% ./stress_test
873 5689 root S 916m 370% 0% ./stress_test
873 5689 root S 916m 370% 0% ./stress_test
873 5689 root S 954m 386% 0% ./stress_test
873 5689 root S 954m 386% 0% ./stress_test
873 5689 root S 954m 386% 0% ./stress_test
873 5689 root S 954m 386% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 992m 401% 0% ./stress_test
873 5689 root S 992m 401% 0% ./stress_test
873 5689 root S 992m 401% 0% ./stress_test
873 5689 root S 992m 401% 0% ./stress_test
873 5689 root S 992m 401% 0% ./stress_test
873 5689 root S 1030m 417% 0% ./stress_test
873 5689 root S 1030m 417% 0% ./stress_test
873 5689 root S 1030m 417% 0% ./stress_test
873 5689 root S 1030m 417% 0% ./stress_test
873 5689 root S 1068m 432% 0% ./stress_test
873 5689 root S 1068m 432% 0% ./stress_test
873 5689 root S 1068m 432% 0% ./stress_test
873 5689 root S 1068m 432% 0% ./stress_test
873 5689 root S 1107m 448% 0% ./stress_test
873 5689 root S 1107m 448% 0% ./stress_test
873 5689 root S 1107m 448% 0% ./stress_test
873 5689 root S 1107m 448% 0% ./stress_test
873 5689 root S 1145m 463% 0% ./stress_test
873 5689 root S 1145m 463% 0% ./stress_test
873 5689 root S 1145m 463% 0% ./stress_test
873 5689 root S 1145m 463% 0% ./stress_test
873 5689 root S 1183m 478% 0% ./stress_test
873 5689 root S 1183m 478% 0% ./stress_test
873 5689 root S 1183m 478% 0% ./stress_test
873 5689 root S 1183m 478% 0% ./stress_test
873 5689 root S 1221m 494% 0% ./stress_test
873 5689 root S 1221m 494% 0% ./stress_test
873 5689 root S 1221m 494% 0% ./stress_test
873 5689 root S 1221m 494% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 1221m 494% 0% ./stress_test
873 5689 root S 1259m 509% 0% ./stress_test
873 5689 root S 1259m 509% 0% ./stress_test
873 5689 root S 1259m 509% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 1259m 509% 0% ./stress_test
873 5689 root S 1297m 525% 0% ./stress_test
873 5689 root S 1297m 525% 0% ./stress_test
873 5689 root S 1297m 525% 0% ./stress_test
873 5689 root S 1297m 525% 0% ./stress_test
873 5689 root S 1336m 540% 0% ./stress_test
873 5689 root S 1336m 540% 0% ./stress_test
873 5689 root S 1336m 540% 0% ./stress_test
873 5689 root S 1336m 540% 0% ./stress_test
873 5689 root S 1374m 556% 0% ./stress_test
873 5689 root S 1374m 556% 0% ./stress_test
873 5689 root S 1374m 556% 0% ./stress_test
873 5689 root S 1374m 556% 0% ./stress_test
873 5689 root S 1412m 571% 0% ./stress_test
873 5689 root S 1412m 571% 0% ./stress_test
873 5689 root S 1412m 571% 0% ./stress_test
873 5689 root S 1412m 571% 0% ./stress_test
873 5689 root S 1450m 586% 0% ./stress_test
873 5689 root S 1450m 586% 0% ./stress_test
873 5689 root S 1450m 586% 0% ./stress_test
873 5689 root S 1450m 586% 0% ./stress_test
873 5689 root S 1450m 586% 0% ./stress_test
873 5689 root S 1488m 602% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 1488m 602% 0% ./stress_test
873 5689 root S 1488m 602% 0% ./stress_test
873 5689 root S 1488m 602% 0% ./stress_test
873 5689 root S 1526m 617% 0% ./stress_test
873 5689 root S 1526m 617% 0% ./stress_test
873 5689 root S 1526m 617% 0% ./stress_test
873 5689 root S 1526m 617% 0% ./stress_test
873 5689 root S 1564m 633% 0% ./stress_test
873 5689 root S 1564m 633% 0% ./stress_test
873 5689 root S 1564m 633% 0% ./stress_test
873 5689 root S 1564m 633% 0% ./stress_test
873 5689 root S 1603m 648% 0% ./stress_test
873 5689 root S 1603m 648% 0% ./stress_test
873 5689 root S 1603m 648% 0% ./stress_test
873 5689 root S 1603m 648% 0% ./stress_test
873 5689 root S 1641m 664% 0% ./stress_test
873 5689 root S 1641m 664% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 1641m 664% 0% ./stress_test
873 5689 root S 1641m 664% 0% ./stress_test
873 5689 root S 1679m 679% 0% ./stress_test
873 5689 root S 1679m 679% 0% ./stress_test
873 5689 root S 1679m 679% 0% ./stress_test
873 5689 root S 1679m 679% 0% ./stress_test
873 5689 root S 1679m 679% 0% ./stress_test
873 5689 root S 1717m 694% 0% ./stress_test
873 5689 root S 1717m 694% 0% ./stress_test
873 5689 root S 1717m 694% 0% ./stress_test
873 5689 root S 1717m 694% 0% ./stress_test
873 5689 root S 1755m 710% 0% ./stress_test
873 5689 root S 1755m 710% 0% ./stress_test
873 5689 root S 1755m 710% 0% ./stress_test
873 5689 root S 1755m 710% 0% ./stress_test
873 5689 root S 1793m 725% 0% ./stress_test
873 5689 root S 1793m 725% 0% ./stress_test
873 5689 root S 1793m 725% 0% ./stress_test
873 5689 root S 1793m 725% 0% ./stress_test
873 5689 root S 1831m 741% 0% ./stress_test
873 5689 root S 1831m 741% 0% ./stress_test
873 5689 root S 1831m 741% 0% ./stress_test
873 5689 root S 1831m 741% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 1870m 756% 0% ./stress_test
873 5689 root S 1870m 756% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 1870m 756% 0% ./stress_test
873 5689 root S 1870m 756% 0% ./stress_test
873 5689 root S 1870m 756% 0% ./stress_test
873 5689 root S 1908m 771% 0% ./stress_test
873 5689 root S 1908m 771% 0% ./stress_test
873 5689 root S 1908m 771% 0% ./stress_test
873 5689 root S 1908m 771% 0% ./stress_test
873 5689 root S 1946m 787% 0% ./stress_test
873 5689 root S 1946m 787% 0% ./stress_test
873 5689 root S 1946m 787% 0% ./stress_test
873 5689 root S 1946m 787% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
1061 5689 root S 1564 1% 0% grep stress
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
873 5689 root S 1984m 802% 0% ./stress_test
Run Code Online (Sandbox Code Playgroud)
第四列是应用程序消耗的内存,第五列是应用程序消耗的内存百分比
因此压力应用程序在内存使用量和内存大小上的增长值大于内存大小:1984M(内存的802%)和应用程序保持运行并分配消耗的内存> 100%.但它会停止分配并在达到时继续运行
28308 5682 root S 2022m 818% 0% ./stress_test
Run Code Online (Sandbox Code Playgroud)
我希望我的应用程序在达到100%时停止分配.
你能解释一下这种行为吗?