3

我想为java进程grep然后找到使用的最大堆内存。我试过这个

def ex =['sh','-c','ps -aef | grep Xmx']
String str =  ex.execute().text

虽然str有类似java -Xmx1024M /kv/classes/bebo/ -Xms512M 如何提取值1024M?我打算使用 java regex,但认为有人可能知道 groovy 中的一种很酷的方式。

4

3 回答 3

5

这是一个不需要 grep (或 sed :) 的 groovy 版本:

("ps -aef".execute().text =~ /.*-Xmx([0-9]+M).*/).each { full, match -> println match } 
于 2008-11-15T17:39:38.170 回答
0

在 Java 中:

String ResultString = null;
Pattern regex = Pattern.compile("-Xmx(\\d+M)");
Matcher regexMatcher = regex.matcher(str);
if (regexMatcher.find()) {
    ResultString = regexMatcher.group(1);
} 
于 2008-11-15T07:55:24.170 回答
0

如果你想要的只是 Xmx 之后的值,你可以从 ex 中返回给你:

def ex =['sh','-c',"ps -aef | grep Xmx | sed -e 's/^.*Xmx\([0-9]*[mM]*\) *$/\1/'"]; 
String str = ex.execute().text;

sed 命令将在返回之前将 ps 的输出转换为 ps 的输出。

于 2008-11-15T09:22:47.970 回答