我正在寻找一种快速而肮脏的方法来分析内存密集型第三方应用程序在减少内存条件下的行为,并确定最小可行空闲内存"阈值。
you@yours:~$ free
total used free shared buffers cached
Mem: 993M 879M 113M 1.1M 15M 116M
you@yours:~$ hogMem 100 &
you@yours:~$ free
total used free shared buffers cached
Mem: 993M 979M 13M 1.1M 15M 116M
you@yours:~$ date; runTheThing; date;
you@yours:~$ fg
you@yours:~$ ^C
you@yours:~$ free
total used free shared buffers cached
Mem: 993M 879M 113M 1.1M 15M 116M
在上文中,我可以使用hogMem
?
我希望用现有的命令来完成它,而不会遇到复杂的编程问题。谷歌搜索这个问题让我获得1,000页关于如何获得更多免费内存的页面,而不是更少。
更新2016/04/28:
所以,由于@Cyrus的提示
,我找到了一种非常方便的方法you@yours:~$ sudo mkdir -p /media/temporary_ram_disk
you@yours:~$ sudo mount -t tmpfs -o size=2048M tmpfs /media/temporary_ram_disk/
you@yours:~$ sudo chown you:you /media/temporary_ram_disk/
you@yours:~$ cd /media/temporary_ram_disk/
you@yours:/media/temporary_ram_disk$ free -h
total used free shared buffers cached
Mem: 993M 879M 113M 1.1M 15M 116M
you@yours:/media/temporary_ram_disk$ fallocate -l 100M empty_file_100M
you@yours:/media/temporary_ram_disk$ ls -l
total 5120
-rw-r--r-- 1 you you 5242880 Apr 28 12:05 empty_file_100M
you@yours:/media/temporary_ram_disk$ free -h
total used free shared buffers cached
Mem: 993M 879M 13M 1.1M 15M 116M
所以我使用的hogMem
实际上是fallocate
!
答案 0 :(得分:3)
可能是查看"内存密集型第三方应用程序在减少内存条件下的行为的最佳方式,"是在减少内存条件下运行它。在linux上,可以使用prlimit
轻松完成。
例如,要查看date
如何运行,其地址空间限制为1,000,000字节,请运行:
$ prlimit -v1000000 date
Segmentation fault
要查看其运行方式,其地址空间限制为10,000,000字节,请运行:
$ prlimit -v10000000 date
Wed Apr 27 12:00:13 PDT 2016
还可以限制目标程序对许多其他资源的访问。例如,最大打开文件数或最大CPU时间也可以限制。
prlimit
包含在util-linux
包中。有关其操作的更多详细信息,请参阅man prlimit
。