java服务申请内存不足

java服务申请内存不足,第1张

服务器上物理内存太小,大部分都是应为程序太多,内存吃紧,而给jvm分配的内存太大,导致java的内存不够,(java程序启动需要的内存,linux不能给),最好调整java程序jvm内存吧(测试环境下)。

可以用 system(命令) 调用 DOS/Windows 命令 获取 正在使用多少 内存 (memory)
命令例子:
wmic process where name="cmdexe" get WorkingSetSize
这里 "cmdexe" 你可替换成 你的程序 名字。
你也可以用你的程序 进程 PID 号数 调用, 命令是:
wmic process where processid=6884 get WorkingSetSize
这里6884你可替换成 你的程序 进程 PID。
输出有2行,第二行是占用内存字节数:
WorkingSetSize
4616192
c/c++ 语言 :
system("wmic process where processid=6884 get WorkingSetSize");
system("wmic process where name=\"cmdexe\" get WorkingSetSize");
用程序名调用时,若有多个同名程序在运行,输出的 内存数 将分行输出出来。

目前大部分应用程序采用的是JAVA语言开发,在产品上线使用一段时间后,经常会出现某个JAVA程序占用的CPU,内存过高,而且几乎从不释放,导致系统卡顿,用户使用变慢,如果要恢复,则必须杀掉该进程或重启该服务,然后进行此 *** 作时,必定会导致业务中断。
程序主要由代码组成,优化则需要知道是哪段代码占用资源,并且一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环,所以通过优化代码来

不同的 *** 作系统可用最大内存不一样。。不同jvm可设置的最大内存也不一样。。你最好就是先测试一下你的机器能用多大的。。
在dos窗口输入java -Xmx1200m -XX:MaxPermSize=60m -version 命令来进行测试,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。
你可用去下面这个地方看下。。讲得比较清楚。

首先java内存可以大体分为堆内存和栈内存。一般收的内存使用过大是指堆内存使用过大。一般分步骤分析。
现在内存过大到底到何种程度。是否引起了GC或者FUll GC。是否影响了正常工作。
1明白现在内存有多大,可以通过工具看,和使用的内存比例。如果项目中需要缓存很多缓存,可以理解使用是合理的。如果服务器内存够大,应用可以适当调整XMX xms参数进行JVM调整。
2如果系统中没有使用缓存,和大对象内存过高,那就考虑是否有内存泄漏。可以使用jmap等jVM调优工具进行对象分析。然后定位过高原因修改代码。
jmap -dump:format=b,file=文件名 [pid]
dump当前系统,根据dump文件我们可以分析当前系统中存在的内存问题。
分析dump文件的工具很多,JDK自带的Jhat,Eclipse也有相关的插件。
我使用的是Eclipse Memory Analyzer,功能很强大,能够生成各种报表,另外可以在不同的时间生成不同的dump,然后通过工具分析两个dump的内存变化。
大家专注我,我写了好多JVM 原理和调优的文章。
文版权归是三僡然所有,转载请标明出处。欢迎转载,欢迎评论,欢迎分享。如果你有文章想分享可以联系我。

如何查看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为实际内存,上例实现按内存排序,由大到小


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10398361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存