我想为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 中的一种很酷的方式。
这是一个不需要 grep (或 sed :) 的 groovy 版本:
("ps -aef".execute().text =~ /.*-Xmx([0-9]+M).*/).each { full, match -> println match }
在 Java 中:
String ResultString = null;
Pattern regex = Pattern.compile("-Xmx(\\d+M)");
Matcher regexMatcher = regex.matcher(str);
if (regexMatcher.find()) {
ResultString = regexMatcher.group(1);
}
如果你想要的只是 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 的输出。