JAva現在のアプリケーションの実行情報(メモリ、スレッド、実行時間、ステータスなど)を取得


一:目的
このプログラムを書く理由は、配置されたアプリケーションが正常に動作しているかどうかを監視し、実行状態を表示する必要があるからです.プロセスが死んだ後、自動的にアプリケーションを起動することもできます.
まず、このコードで取得できる情報は次のとおりです.
/**
     *           
     */
    private String host;
    /**
     *        IP  
     */
    private String ipAddress;
    /**
     *     
     */
    private long freeMemory;
    /**
     *     
     */
    private long totalMemory;
    /**
     * java             
     */
    private long maxMemory;
    
    /**
     *       
     */
    private String osName;
    /**
     *    
     */
    private long pid;
    
    
    /**
     *       
     */
    private Date startTime;
    
    /**
     *      
     */
    private String classPath;
    
    private String projectPath;
    
    /**
     *       ,    
     */
    private long runtime;
    /**
     *     
     */
    private int threadCount;

 
 
二:この情報を取得するコード
ここに直接コードを貼るのは、難しい論理ではありません.
import java.io.File;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.framework.monitor.common.bean.ClientStatus;

public class StatusUtil {
    public static Logger LOG = LoggerFactory.getLogger(StatusUtil.class);
    private static ClientStatus clientStatus = new ClientStatus();
    
    /**
     * 
     * @param projectName     
     * @param version    
     * @param group    ,       
     * @param ipAddress    NULL, NULL      ,           ,     
     * @param startCMD        ,      ,         
     * @param remark   ,        
     * @return
     */
    public static ClientStatus getClientStatus(String projectName,int version,String group,String ipAddress,String startCMD,String[] remark){
        clientStatus.setProjectName(projectName);
        clientStatus.setVersion(version);
        clientStatus.setRemark(remark);
        clientStatus.setGroup(group);
        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
        Runtime runtime = Runtime.getRuntime();
        //    
        long freeMemory = runtime.freeMemory();
        clientStatus.setFreeMemory(byteToM(freeMemory));
        //    
        long totalMemory = runtime.totalMemory();
        clientStatus.setTotalMemory(byteToM(totalMemory));
        //         
        long maxMemory = runtime.maxMemory();
        clientStatus.setMaxMemory(byteToM(maxMemory));
        //    
        clientStatus.setOsName(System.getProperty("os.name"));
        InetAddress localHost;
        try {
            localHost = InetAddress.getLocalHost();
            String hostName = localHost.getHostName();
            clientStatus.setHost(hostName);
            if(ipAddress == null){
                ipAddress = localHost.getHostAddress();
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
            LOG.error("             Ip  ");
            clientStatus.setHost("  ");
        }
        //ip
        clientStatus.setIpAddress(ipAddress);
        clientStatus.setId(makeClientId(projectName,ipAddress));
        //      
        long startTime = runtimeMXBean.getStartTime();
        Date startDate = new Date(startTime);
        clientStatus.setStartTime(startDate);
        //     
        clientStatus.setClassPath(runtimeMXBean.getBootClassPath());
        //      
        clientStatus.setRuntime(runtimeMXBean.getUptime());
        //    
        clientStatus.setThreadCount(ManagementFactory.getThreadMXBean().getThreadCount());
        clientStatus.setProjectPath(new File("").getAbsolutePath());
        clientStatus.setCommitDate(new Date());
        clientStatus.setPid(getPid());
        return clientStatus;
    }
    
    /**
     *  byte   M
     * @param bytes 
     * @return
     */
    public static long byteToM(long bytes){
        long kb =  (bytes / 1024 / 1024);
        return kb;
    }
    
    /**
     *        ID
     * @param projectName
     * @param ipAddress
     * @return
     */
    public static String makeClientId(String projectName,String ipAddress){
        String t = projectName + ipAddress + new File("").getAbsolutePath();
        int client_id = t.hashCode();
        client_id = Math.abs(client_id);
        return String.valueOf(client_id);
    }
    
    /**
     *      ,   windows linux
     * @return
     */
    public static long getPid(){
        try {
            String name = ManagementFactory.getRuntimeMXBean().getName();  
            String pid = name.split("@")[0];  
            return Long.parseLong(pid);
        } catch (NumberFormatException e) {
            LOG.warn("      Id");
            return 0;
        }
    }
    
    
}

 
転載先:https://www.cnblogs.com/zhuxiaojie/p/6375261.html