⑴ java如何获得系统环境变量和当前程序运行的进程号
import java.util.*;
import java.io.*;
class SysProb
{
//返回纳局当前系统变量的函数,结果放在一个Properties里边,这里只针对win2k以上的,其它系统可以自己改进
public Properties getEnv() throws Exception
{
Properties prop=new Properties();
String OS = System.getProperty("os.name").toLowerCase();
Process p=null;
if(OS.indexOf("windows")>-1)
{
p=Runtime.getRuntime().exec("cmd /c set"); //其它的操作系统可以自行处理, 我这里是win2k
}
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while((line=br.readLine())!=null)
{
int i=line.indexOf("=");
if(i>-1)
{
String key=line.substring(0,i);
String value=line.substring(i+1);
prop.setProperty(key,value);
}
}
return prop;
}
//具体用法
public static void main(String[] args)
{
try
{
SysProb sp=new SysProb();
Properties p=sp.getEnv();
System.out.println(p.getProperty("Path")); //注意大小写,如果写成path就不对了
}
catch(Exception e)
{
System.out.println(e);
}
}
}
其他类型:
%COMPUTERNAME% 返回计腔茄桐算机的名称。
%COMSPEC% 返回命令行解释器可执行伍坦程序的准确路径。 %WINDIR% 返回操作系统目录的位置。
%OS% 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。 %PATH% 指定可执行文件的搜索路径。
%USERDOMAIN% 返回包含用户帐户的域的名称。 %USERNAME% 返回当前登录的用户的名称。
⑵ java获取进程名称
代码:
package com.test;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
public class Target {
public static void main(String[] args) throws InterruptedException { System.out.println(getProcessID());
while(true) {
Thread.sleep(10000);
}
}
public static final int getProcessID() {
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
System.out.println(runtimeMXBean.getName());
return Integer.valueOf(runtimeMXBean.getName().split("@")[0]) .intValue();
}
}
运行结果:2896@PC-20150603VRPL2896
当前进程ID为2896。
ManagementFactory是一个在运行时管理和监控Java VM的工厂类,它能提供很多管理VM的静态接口,比如RuntimeMXBean;
RuntimeMXBean是Java虚拟机的运行时管理接口.
⑶ 为什么进程显示安装向导用java获取的进程名称
Java 获取进程名称的方法是通过读取操作系统中正在运行的进程列表,获取每个进程的名称和其他详细信息。在操作系统中,一个进程可以包含多个线程,因此获取进程名称是获乱枣取进程名字所表示的主线程的名称。
对于显示安装向导使用Java获取的进程名称不正确的问题,可能有以下几种原因:
1. 进程没有按预期名称显示:如果安装向导没有按照操作系统要求的格式命名,那么Java可能无法正确地识别该进程,并且可能会显示错误的进程名称。
2. 操作系统权限不足:如果Java程序没有足够的权限来访问正在运行的进程列表,那么它可能无法正确地阅读该信息并显示错误的进程名称。
3. 进程正在被占用或关闭:如果安装向导正在被占用或已经关闭,Java可能无法正确地读取正在运行的进程列表,并且可能会显示错误的进程名称哗肆拆。
为了解决这个问题,可以尝试以下方法:
1. 确保进程名称按照操作系统要求的格式命名。
2. 给Java程序赋予足够的权限,以便能够读取正在运行的进程列表。
3. 在尝试读取进程列表之前,确保正在运行的进程没有被占用或已经关闭。雹闹
⑷ jstack 分析出线程id 如何找到进程吗
jstack 分析出线程id 如何找到进程
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息。
如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:jstack [-l] pid
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
需要注意的问题:
l 不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, mp信息也有差别。
l 在实际运行中,往往一次 mp的信息,还不足以确认问题。建议产生三次 mp信息,如果每次 mp都指向同一个问题,我们才确定问题的典型性。
2、命令格式
$jstack [ option ] pid
$jstack [ option ] executable core
$jstack [ option ] [server-id@]remote-hostname-or-IP
参数说明:
pid: java应用程序的进程号,一般可以通过jps来获得;
executable:产生core mp的java可执行程序;
core:打印出的core文件;
remote-hostname-or-ip:远程debug服务器的名称或IP;
server-id: 唯一id,假如一台主机上多个远程debug服务;
示例:
$jstack –l 23561
线程分析:
一般情况下,通过jstack输出的线程信息主要包括:jvm自身线程、用户线程等。其中jvm线程会在jvm启动时就会存在。对于用户线程则是在用户访问时才会生成。
⑸ wasmaxperm怎么查
高级 Java 必须掌握:JVM 分析工具和查看命令,超详细
薄荷味的团子
2019-6-12 10:56
jinfo
可以输出并修改运行时的Java 进程的opts。
jps
与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。
jstat
一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jmap
打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。
jconsole
一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
详细:在使用这些工具前,先用JPS命令获取当前的每个jvm进程号,然后选择要查看的JVM。
jstat工具喊则特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。
以下详细介绍各个参数的意义。
jstat -class pid:显示加载宏渗皮class的数量,及所占空间等信息。
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时蔽差间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。
其他的可以根据这个类推, OC是old内纯的占用量。
jstat -gcnew pid:new对象的信息。
jstat -gcnewcapacity pid:new对象的信息及其占用量。
jstat -gcold pid:old对象的信息。
jstat -gcoldcapacity pid:old对象的信息及其占用量。
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
jstat -util
⑹ java在windows下如何实现获取进程ID
给你个例子,通过调用改高windows的命令得到当前系统内的进程列表,然后你根据需要自己过滤出想要的进程ID(字符串分析).
try {
Process p = Runtime.getRuntime().exec("cmd /c tasklist");
InputStream is = p.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
byte[] buf = new byte[4096];
while(is.read(buf)>0){
//我在这里只是简单输出结果,你可以对结果进行你要的处理。
System.out.println(new String(buf));
}
bis.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
} 答案补充 java是运行在其JVM中的,JVM是操作系统的一个进程,和操作系统中的其他进程是一样的.
对于你的补充提祥念问,建议你使用java的jni来解决.java通过jni可以调用C来完核宴尺成一些底层的事情.
⑺ 如何查看Java进程并获取进程ID
用top -u 命令查友蔽闭看进程以及PID。 命令如下: $ top -u PID — 进程idUSER — 进程所有并好者PR —好裂
⑻ docker容器内外cpu占用不一致
Docker容袜坦器cpu占用问题排查方案如下:
1、top命令查出Java进程ID;
2、查出java进程内告差桐哪个线程ID占用cpu最高;
3、将线程ID转换成16进制;庆陵
4、抓取对应线程堆栈信息;
5、查看线程异常的日志信息:jstack进程号|grep16进制异常线程号-A90。
⑼ 如何查看java进程及服务
鼠标放在电脑桌面底部右击,选择任务管理器,就能看到你想看的了
⑽ java 获取指定的进程id
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class GetPid {
private static final String PNAME = "QQ";
public static void main(String[] args)
throws IOException {
System.out.println("包含关键字 "+PNAME+" 的进程有:");
System.out.println();
String path = System.getProperty("user.dir");
final File createFileName = new File(path + "\\mytempscript.vbe");
if(createFileName.exists()?createFileName.delete():createFileName.createNewFile()){}
final PrintWriter pw = new PrintWriter(new FileWriter(createFileName,
true), true);
pw.println("for each ps in getobject(\"winmgmts:\\\\.\\root\\cimv2:win32_process\").instances_");
pw.println("wscript.echo ps.handle&vbtab&ps.name");
pw.println("next");
pw.close();
final InputStream ii = Runtime.getRuntime().exec(
"cscript " + path + "\\mytempscript.vbe").getInputStream();
final InputStreamReader ir = new InputStreamReader(ii);
final BufferedReader br = new BufferedReader(ir);
String str = null;
String[] ss = null;
while ((str = br.readLine()) != null) {
if (str.indexOf(PNAME)>0&&str.endsWith(".exe")) {
ss = str.split("\\s");
for(int i=0;i<ss.length;i+=2){
System.out.println("****************************");
System.out.println("进程名:"+ss[i+1]+"\n进程ID:"+ss[i]);
}
}
}
System.out.println("****************************");
ir.close();
ii.close();
br.close();
}
}
运行结果如下
包含关键字 QQ 的进程有:
****************************
进程名:QQ.exe
进程ID:3956
****************************