日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

JAVA ulimit,java-从linux中的jvm中查找硬打开和软打开文件限制(ulimit -n和ulimit -Hn)

發布時間:2024/9/27 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA ulimit,java-从linux中的jvm中查找硬打开和软打开文件限制(ulimit -n和ulimit -Hn) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我有一個問題,我需要從Java / groovy程序中找出Linux中進程的硬打開和軟打開文件限制.當我從終端執行ulimit時,它將為硬打開文件限制和軟打開文件限制提供單獨的值.

$ulimit -n

1024

$ulimit -Hn

4096

但是,如果我以常規方式執行它,它將忽略軟限制并始終返回硬限制值.

groovy> ['bash', '-c', 'ulimit -n'].execute().text

Result: 4096

groovy> ['bash', '-c', 'ulimit -Hn'].execute().text

Result: 4096

如果我缺少什么,請告訴我.我已使用ubuntu 12.04,Groovy版本:1.8.4 JVM:1.6.0_29來執行此操作.

更新:

我在Java中嘗試過同樣的事情.

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.Reader;

import java.io.StringWriter;

import java.io.Writer;

public class LinuxInteractor {

public static int executeCommand(String command, boolean waitForResponse, OutputHandler handler) {

int shellExitStatus = -1;

ProcessBuilder pb = new ProcessBuilder("bash", "-c", command);

pb.redirectErrorStream(true);

try {

Process shell = pb.start();

if (waitForResponse) {

// To capture output from the shell

InputStream shellIn = shell.getInputStream();

// Wait for the shell to finish and get the return code

shellExitStatus = shell.waitFor();

convertStreamToStr(shellIn, handler);

shellIn.close();

}

}

catch (IOException e) {

System.out

.println("Error occured while executing Linux command. Error Description: "

+ e.getMessage());

}

catch (InterruptedException e) {

System.out

.println("Error occured while executing Linux command. Error Description: "

+ e.getMessage());

}

return shellExitStatus;

}

public static String convertStreamToStr(InputStream is, OutputHandler handler) throws IOException {

if (is != null) {

Writer writer = new StringWriter();

char[] buffer = new char[1024];

try {

Reader reader = new BufferedReader(new InputStreamReader(is,

"UTF-8"));

int n;

while ((n = reader.read(buffer)) != -1) {

String output = new String(buffer, 0, n);

writer.write(buffer, 0, n);

if(handler != null)

handler.execute(output);

}

} finally {

is.close();

}

return writer.toString();

} else {

return "";

}

}

public abstract static class OutputHandler {

public abstract void execute(String str);

}

public static void main(String[] args) {

OutputHandler handler = new OutputHandler() {

@Override

public void execute(String str) {

System.out.println(str);

}

};

System.out.print("ulimit -n : ");

LinuxInteractor.executeCommand("ulimit -n", true, handler);

System.out.print("ulimit -Hn : ");

LinuxInteractor.executeCommand("ulimit -Hn", true, handler);

}

}

該程序的輸出:

$java LinuxInteractor

ulimit -n : 4096

ulimit -Hn : 4096

為什么Java中的行為相同.是Java設置ulimit嗎?

提前致謝.

解決方法:

Groovy正在其啟動腳本中將此限制設置為最大.

在startGroovy:160中:

# Increase the maximum file descriptors if we can.

if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then

MAX_FD_LIMIT=`ulimit -H -n`

if [ $? -eq 0 ] ; then

if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then

MAX_FD="$MAX_FD_LIMIT"

fi

ulimit -n $MAX_FD

if [ $? -ne 0 ] ; then

warn "Could not set maximum file descriptor limit: $MAX_FD"

fi

else

warn "Could not query businessSystem maximum file

descriptor limit: $MAX_FD_LIMIT"

fi

fi

事實證明,jvm自行設置了此限制.我不確定為什么groovy也會改變它.嘗試:

java -XX:-MaxFDLimit LinuxInteractor

它將禁用此行為.

標簽:groovy,jvm,ulimit,linux,java

來源: https://codeday.me/bug/20191101/1982240.html

總結

以上是生活随笔為你收集整理的JAVA ulimit,java-从linux中的jvm中查找硬打开和软打开文件限制(ulimit -n和ulimit -Hn)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。