S*****y 发帖数: 567 | 1 希望有个大虾能给解释下。
版本是2.6.32-71.el6.x86_64
发现读取文件后,free mem大幅下降。文件很大,10几G的样子
total used free shared buffers cached
Mem: 32091 24459 7632 0 7 23250
-/+ buffers/cache: 1200 30891
Swap: 34271 21 34250
就是这里free/Mem那一格
网上查了说看是否内存泄漏应该看swap?
我有一个程序,读取文件。
如果我手动清理掉used Mem
echo 3 > /proc/sys/vm/drop_caches
然后跑一次那个程序。就会看到大概10个G的内存被用了,没有释放(文件大小差不多)
然后速度是1分钟。
然后在不释放那些内存的情况下,再跑n次,每次都是10秒钟。包括读取另外一个差不
多大小的文件,也是10秒钟的样子。free还是会减少,swap没什么变化。
请教为什么会造成速度上的差别呢?
另外如果我如果我手动清理掉used Mem,不跑那个程序。只是往硬盘写入一个10G的文
件,也是会看到free大大减少。
程序是
char buffer[65536];
char* bbuf = buffer;
int readed;
const int FIRST_READ = sizeof(unsigned short int);
readed = fread(&lenNet, FIRST_READ, 1, fp);
while(readed==1){
lenHost = rip_ntohs(lenNet);
fread(buffer, lenHost, 1, fp);
}
readed = fread(&lenNet, FIRST_READ, 1, fp);
count ++;
}
buffer是会自己释放的吧
谢谢了 | m**k 发帖数: 290 | 2
内存泄漏跟 swap 没有直接的关系.
检查内存泄漏可以用一些工具比如 valgrind
多)
Linux 会把 IO read 数据放在系统 cache 里. 所以第二次读文件就可以直接从 cache
里读, 速度就会比第一次快.
search 了一下, vm.drop_caches 是一个 command, 而不是 tunable. 每次写的时候
才做 drop cache
系统内存不够的时候会自动释放 cache
【在 S*****y 的大作中提到】 : 希望有个大虾能给解释下。 : 版本是2.6.32-71.el6.x86_64 : 发现读取文件后,free mem大幅下降。文件很大,10几G的样子 : total used free shared buffers cached : Mem: 32091 24459 7632 0 7 23250 : -/+ buffers/cache: 1200 30891 : Swap: 34271 21 34250 : 就是这里free/Mem那一格 : 网上查了说看是否内存泄漏应该看swap? : 我有一个程序,读取文件。
| G*****h 发帖数: 33134 | 3 文件 buffer 是内存不够用的时候才扔掉吧
【在 S*****y 的大作中提到】 : 希望有个大虾能给解释下。 : 版本是2.6.32-71.el6.x86_64 : 发现读取文件后,free mem大幅下降。文件很大,10几G的样子 : total used free shared buffers cached : Mem: 32091 24459 7632 0 7 23250 : -/+ buffers/cache: 1200 30891 : Swap: 34271 21 34250 : 就是这里free/Mem那一格 : 网上查了说看是否内存泄漏应该看swap? : 我有一个程序,读取文件。
|
|