我正在使用一種工具來生成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