为了账号安全,请及时绑定邮箱和手机立即绑定

Set ulimit -n from java

Set ulimit -n from java

阿晨1998 2022-08-03 10:49:32
我正在尝试设置我的java程序运行的ulimit。目前,似乎ulimit -n设置为4096,因为当我运行此代码(这是我的java程序的一部分)时,它输出4096。ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", "ulimit -n");try {  Process process = processBuilder.start();  // Prints 4096.  LOGGER_.info(getStringFromInputStream(process.getInputStream()));} catch (IOException e) {  // The flow does not reach this catch block.  LOGGER_.error("exception caught: " + e.getMessage());}是否可以将其更改为其他内容,例如8192?我试过这个:ProcessBuilder processBuilder2 = new ProcessBuilder("/bin/bash", "-c", "ulimit -n 8192");try {  Process process = processBuilder2.start();  LOGGER_.error("starting agent2...");  LOGGER_.error(getStringFromInputStream(process.getInputStream()));} catch (IOException e) {  LOGGER_.error("exception caught2: " + e.getMessage());}和try {  String[] cmdString = new String[3];  cmdString[0] = "/bin/bash";  cmdString[1] = "-c";  cmdString[2] = "ulimit -n 8192";  Process process = Runtime.getRuntime().exec(cmdString);  LOGGER_.error(getStringFromInputStream(process.getInputStream()));} catch (IOException e) {  LOGGER_.error("exception caught:" + e.getMessage());}但我不确定这些是否是正确的方法。此外,如果 ulimit -n 甚至被修改了。
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

ulimit命令更新当前进程和所有继承进程的限制。调用 using 或 时,它会启动一个新进程并更新此进程的限制,而不会影响当前的 Java 进程。ulimitRuntime.execProcessBuilder

为了对自身应用新的限制,Java 进程应该在自己的上下文中调用 setrlimit 函数。由于此函数没有 Java 包装器,因此只能通过本机接口调用它:JNI、JNA 或 JNR。

但是,如果Java在非特权用户下运行,则更新文件限制()无论如何都是无用的,因为HotSpot JVM会自动将此限制更新为最大允许值 - 请参阅此问题ulimit -n


查看完整回答
反对 回复 2022-08-03
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

我做了一个有效的解决方法。我使用的是执行java程序的shell脚本。因此,我在 shell 脚本执行运行 java 部分之前设置了 ulimit。正如@apangin所回答的,这集合了 shell 进程的 ulimit 和从这个 shell 进程生成的 java 进程,继承了这个 ulimit。


查看完整回答
反对 回复 2022-08-03
  • 2 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号