我正在使用一种工具来生成PDF文件,但很不幸100%不可靠。有时这个工具会进入无限循环,并且消耗100%的内存和处理器。使用有限的资源运行bash脚本/程序
我从我的Java应用程序Runtime.getRuntime.exec("command")
运行此工具。
- 有没有一种方法可以直接在Java命令中为此进程设置最大执行时间/内存?
- 如果不是直接来自Java,是否有办法将命令包装到某些bash工具中,这会限制资源?
我更喜欢命令失败,而不是利用所有资源并基本上终止服务器。
编辑:
基础上ulimit
建议,我想这一点:
Runtime.getRuntime()
.exec(arrayOf("bash", "-c", "ulimit -m 2; ulimit -a; pdfprint"))
我可以看到的ulimit工作:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) 2
open files (-n) 10240
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) 2
奇怪的是,我的预期pdfprint
崩溃,因为它没有足够的内存。但是,这并没有发生,程序运行正常。
既然我们谈到的bash,我想'command'已经是一个脚本。你不能在调用任何应用程序实际执行PDF的东西之前,在脚本中设置ulimits(数据大小等,堆栈大小等)? – John3136