A. 如何查看java進程大量佔用內存
如何查看java進程大量佔用內存
你好,方法如下:
可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令:
(1)top
top命令是linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器
可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令:
$ top -u oracle
內容解釋:
PID:進程的ID
USER:進程所有者
PR:進程的優先順序別,越小越優先被執行
NInice:值
VIRT:進程佔用的虛擬內存
RES:進程佔用的物理內存
SHR:進程使用的共享內存
S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數
%CPU:進程佔用CPU的使用率
%MEM:進程使用的物理內存和總內存的百分比
TIME+:該進程啟動後佔用的總的CPU時間,即佔用CPU使用時間的累加值。
COMMAND:進程啟動命令名稱
常用的命令:
P:按%CPU使用率排行
T:按MITE+排行
M:按%MEM排行
(2)pmap
可以根據進程查看進程相關信息佔用的內存情況,(進程號可以通過ps查看)如下所示:
$ pmap -d 14596
(3)ps
如下例所示:
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' 其中rsz是是實際內存
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle | sort -nrk5
其中rsz為實際內存,上例實現按內存排序,由大到小
B. 如何在java中讀取proc配置文件獲取 cpu和內存佔用率
(1) 處理器使用率
(2) 內存使用率
(3) 流入流出數據包
(4) 整體網路負載
這些數據分別要從/proc/stat、/proc/meminfo、/proc/net/dev三個文件中提取,其實在嵌入式linux中一般都是vlan劃分的介面,在/proc/net/vlan/介面名的文件中可以看到具體某一介面的流量。如里有問題或對要提取的數據不太清楚,可以使用man proc來查看proc文件系統的聯機手冊。
C. java怎麼實時獲取本地cpu使用率 內存使用率
Runtime.getRuntime().exec("vmstat 1");
D. Java程序佔用內存太高了怎麼辦
先看下是否有內存泄露,簡單的方法就是隔一段時間檢查下內存,看看是否是持續上升。
然後看下資源是否可以優化,比如你載入的圖片有沒有resize過,盡可能減少資源的內存消耗。
游戲卡頓最主要的是FPS幀率太低,把幀率統計輸出來看下。檢查下UI線程里或者OpenGL線程里是否做了I/O操作,這個是造成卡頓的主要原因。把I/O操作全部放入工作線程中,UI線程只做數據讀取和渲染。這樣幀率就可以提高了
E. java 獲取linux內存使用率
整數的除法,是整除的
先轉成double類型的
~
~
~
~
F. 一個開發java的人需要多大內存
最少是4G。
分析:
java開發需要安裝jdk、eclipse、oracle等軟體;
java運行需要tomcat 、JVM和程序的運行內存;
以上的這些軟體基本都運行起來的話,大概需要2G多內存,而電腦本身還需要一部分,所以最低配置也得4G,建議開發用6G或者是8G。
G. java獲取系統的內存總量和已使用量,各程序的cpu使用百分比以及總量
使用sigar來監控,簡單方便!
使用說明:以下代碼需要配合sigar的dll文件來用,需要將dll文件放到JDK下的bin文件夾下,供sigar程序調用,還需要sigarjar包。以下程序經過測試,完全可用!
有關jar包跟dll文件我上傳不了,私信我,我發你importjava.net.InetAddress;
importjava.net.UnknownHostException;
importjava.util.Map;
importjava.util.Properties;
importjava.util.Timer;
importjava.util.TimerTask;
importorg.hyperic.sigar.CpuInfo;
importorg.hyperic.sigar.CpuPerc;
importorg.hyperic.sigar.FileSystem;
importorg.hyperic.sigar.FileSystemUsage;
importorg.hyperic.sigar.Mem;
importorg.hyperic.sigar.NetFlags;
importorg.hyperic.sigar.NetInterfaceConfig;
importorg.hyperic.sigar.NetInterfaceStat;
importorg.hyperic.sigar.OperatingSystem;
importorg.hyperic.sigar.Sigar;
importorg.hyperic.sigar.SigarException;
importorg.hyperic.sigar.Swap;
importorg.hyperic.sigar.Who;
publicclassRuntimeTest{
publicstaticvoidmain(String[]args){
try{
Timertimer=newTimer();//定時器
TimerTasktask=newTimerTask(){
publicvoidrun(){
try{
memory();
}catch(SigarExceptione){
e.printStackTrace();
}
}
};
try{
timer.schele(task,0,3000);//每3秒取一次
}catch(Exceptionex){
ex.printStackTrace();
}
//System信息,從jvm獲取
//property();//根據自己的需求,都可以放到定時器中定時獲取
//cpu信息
//cpu();
//內存信息
//memory();
//操作系統信息
//os();
//用戶信息
//who();}catch(Exceptione1){
e1.printStackTrace();
}
}
privatestaticvoidproperty()throwsUnknownHostException{
Runtimer=Runtime.getRuntime();
Propertiesprops=System.getProperties();
InetAddressaddr;
addr=InetAddress.getLocalHost();
Stringip=addr.getHostAddress();
Map<String,String>map=System.getenv();
StringuserName=map.get("USERNAME");//獲取用戶名
StringcomputerName=map.get("COMPUTERNAME");//獲取計算機名
StringuserDomain=map.get("USERDOMAIN");//獲取計算機域名
System.out.println("用戶名:"+userName);
System.out.println("計算機名:"+computerName);
System.out.println("計算機域名:"+userDomain);
System.out.println("本地ip地址:"+ip);
System.out.println("本地主機名:"+addr.getHostName());
System.out.println("JVM可以使用的總內存:"+r.totalMemory());
System.out.println("JVM可以使用的剩餘內存:"+r.freeMemory());
System.out.println("JVM可以使用的處理器個數:"+r.availableProcessors());
System.out.println("Java的運行環境版本:"+props.getProperty("java.version"));
System.out.println("Java的運行環境供應商:"+props.getProperty("java.vendor"));
System.out.println("Java供應商的URL:"+props.getProperty("java.vendor.url"));
System.out.println("Java的安裝路徑:"+props.getProperty("java.home"));
System.out.println("Java的虛擬機規范版本:"+props.getProperty("java.vm.specification.version"));
System.out.println("Java的虛擬機規范供應商:"+props.getProperty("java.vm.specification.vendor"));
System.out.println("Java的虛擬機規范名稱:"+props.getProperty("java.vm.specification.name"));
System.out.println("Java的虛擬機實現版本:"+props.getProperty("java.vm.version"));
System.out.println("Java的虛擬機實現供應商:"+props.getProperty("java.vm.vendor"));
System.out.println("Java的虛擬機實現名稱:"+props.getProperty("java.vm.name"));
System.out.println("Java運行時環境規范版本:"+props.getProperty("java.specification.version"));
System.out.println("Java運行時環境規范供應商:"+props.getProperty("java.specification.vender"));
System.out.println("Java運行時環境規范名稱:"+props.getProperty("java.specification.name"));
System.out.println("Java的類格式版本號:"+props.getProperty("java.class.version"));
System.out.println("Java的類路徑:"+props.getProperty("java.class.path"));
System.out.println("載入庫時搜索的路徑列表:"+props.getProperty("java.library.path"));
System.out.println("默認的臨時文件路徑:"+props.getProperty("java.io.tmpdir"));
System.out.println("一個或多個擴展目錄的路徑:"+props.getProperty("java.ext.dirs"));
System.out.println("操作系統的名稱:"+props.getProperty("os.name"));
System.out.println("操作系統的構架:"+props.getProperty("os.arch"));
System.out.println("操作系統的版本:"+props.getProperty("os.version"));
System.out.println("文件分隔符:"+props.getProperty("file.separator"));
System.out.println("路徑分隔符:"+props.getProperty("path.separator"));
System.out.println("行分隔符:"+props.getProperty("line.separator"));
System.out.println("用戶的賬戶名稱:"+props.getProperty("user.name"));
System.out.println("用戶的主目錄:"+props.getProperty("user.home"));
System.out.println("用戶的當前工作目錄:"+props.getProperty("user.dir"));
}
privatestaticvoidmemory()throwsSigarException{
Sigarsigar=newSigar();
Memmem=sigar.getMem();
floattotal=mem.getTotal();
floatused=mem.getUsed();
//內存總量
System.out.println("內存總量:"+mem.getTotal()/1024L/1024L+"Mav");
//當前內存使用量
System.out.println("當前內存使用量:"+mem.getUsed()/1024L/1024L+"Mused");
//當前內存剩餘量
System.out.println("當前內存剩餘量:"+mem.getFree()/1024L/1024L+"Mfree");
//當前內存使用率
System.out.println("內存使用率:"+used/total*100+"%");
Swapswap=sigar.getSwap();
//交換區總量
System.out.println("交換區總量:"+swap.getTotal()/1024L/1024L+"Mav");
//當前交換區使用量
System.out.println("當前交換區使用量:"+swap.getUsed()/1024L/1024L+"Mused");
//當前交換區剩餘量
System.out.println("當前交換區剩餘量:"+swap.getFree()/1024L/1024L+"Mfree");
}
privatestaticvoidcpu()throwsSigarException{
Sigarsigar=newSigar();
CpuInfoinfos[]=sigar.getCpuInfoList();
CpuPerccpuList[]=null;
cpuList=sigar.getCpuPercList();
for(inti=0;i<infos.length;i++){//不管是單塊CPU還是多CPU都適用
CpuInfoinfo=infos[i];
System.out.println("第"+(i+1)+"塊CPU信息");
System.out.println("CPU的總量MHz:"+info.getMhz());//CPU的總量MHz
System.out.println("CPU生產商:"+info.getVendor());//獲得CPU的賣主,如:Intel
System.out.println("CPU類別:"+info.getModel());//獲得CPU的類別,如:Celeron
System.out.println("CPU緩存數量:"+info.getCacheSize());//緩沖存儲器數量
printCpuPerc(cpuList[i]);
}
}
privatestaticvoidprintCpuPerc(CpuPerccpu){
System.out.println("CPU用戶使用率:"+CpuPerc.format(cpu.getUser()));//用戶使用率
System.out.println("CPU系統使用率:"+CpuPerc.format(cpu.getSys()));//系統使用率
System.out.println("CPU當前等待率:"+CpuPerc.format(cpu.getWait()));//當前等待率
System.out.println("CPU當前錯誤率:"+CpuPerc.format(cpu.getNice()));//
System.out.println("CPU當前空閑率:"+CpuPerc.format(cpu.getIdle()));//當前空閑率
System.out.println("CPU總的使用率:"+CpuPerc.format(cpu.getCombined()));//總的使用率
}
privatestaticvoidos(){
OperatingSystemOS=OperatingSystem.getInstance();
//操作系統內核類型如:386、486、586等x86
System.out.println("操作系統:"+OS.getArch());
System.out.println("操作系統CpuEndian():"+OS.getCpuEndian());//
System.out.println("操作系統DataModel():"+OS.getDataModel());//
//系統描述
System.out.println("操作系統的描述:"+OS.getDescription());
//操作系統類型
//System.out.println("OS.getName():"+OS.getName());
//System.out.println("OS.getPatchLevel():"+OS.getPatchLevel());//
//操作系統的賣主
System.out.println("操作系統的賣主:"+OS.getVendor());
//賣主名稱
System.out.println("操作系統的賣主名:"+OS.getVendorCodeName());
//操作系統名稱
System.out.println("操作系統名稱:"+OS.getVendorName());
//操作系統賣主類型
System.out.println("操作系統賣主類型:"+OS.getVendorVersion());
//操作系統的版本號
System.out.println("操作系統的版本號:"+OS.getVersion());
}
privatestaticvoidwho()throwsSigarException{
Sigarsigar=newSigar();
Whowho[]=sigar.getWhoList();
if(who!=null&&who.length>0){
for(inti=0;i<who.length;i++){
//System.out.println("當前系統進程表中的用戶名"+String.valueOf(i));
Who_who=who[i];
System.out.println("用戶控制台:"+_who.getDevice());
System.out.println("用戶host:"+_who.getHost());
//System.out.println("getTime():"+_who.getTime());
//當前系統進程表中的用戶名
System.out.println("當前系統進程表中的用戶名:"+_who.getUser());
}
}
}
}
H. java怎麼查看系統的cpu利用率,內存利用率
使用sigar來監控,簡單方便!使用說明:以下代碼需要配合sigar的dll文件來用,需要將dll文件放到JDK下的bin文件夾下,供sigar程序調用,還需要sigar jar包。以下程序經過測試,完全可用! 有關jar包跟dll文件 我上傳不了
I. 電腦Java8update內存使用率高
可能是代碼原因導致的問題,也可能是其他原因導致的問題。
使用dstat和top查看內存使用最高的應用,查到內存佔用最高的是java應用,使用2253M內存,但是這台伺服器跑了好幾個java,具體哪個進程使用top看下資源情況,使用top,使用dstat可以看到java應用整體內存使用率超過了70%,其中pid為16494的進程一個應用佔了28.7的內存,使用ps查看16494的線程情況,命令:psp16494-L-opcpu,pmem,pid,tid,time,tname,cmd,看到16494這個pid的應用產生了很多線程。在分析前需要將17417這個id轉換為16進制,方便查找信息12[root@localhost~]#printf"%x
"17417,440916進制為4409。將pid為16494的應用列印到日誌中1[root@localhost~]#jstack-l16494>jstack.log。查看內存堆棧信息,1[root@localhost~]#vimjstack.log,[root@localhost~]#vimjstack.log在日誌信息中查找剛剛轉換的4409。可以看到這個線程狀態為WAITING通過查看日誌發現有大量的waitingoncondition。1,parkingtowaitfor<0x0000000085dce510>存在大量線程等待被喚醒,佔用大量內存。
J. 怎麼通過java程序查看java程序自身的CPU使用率和內存使用情況
取得進程ID,調用系統API取得相關值(Windows和Linux是不一樣的的)。