windows defender antivirus占用内存_是什么导致你的Java服务器内存和CPU占用过高呢

ad3f1ef8908cad86632ca167eefff053.gif

一、内存占用过高

1、造成服务器内存占用过高只有两种情况:内存溢出或内存泄漏

(1)内存溢出:程序分配的内存超出物理内存的大小,导致无法继续分配物理内存,出现OOM报错。

4e86e03f81f7cd55206d923cad19998f.png

(2)内存泄漏:不再调用的对象一直占用着内存不释放,导致所占用的这块内存被浪费掉,久而久之,内存泄漏的对象堆积起来,也会导致物理机的内存被耗尽,出现OOM报错。

3aefc216371997149ff12ff7db96116f.png

2、内存过高的检测办法:

一般我们的Java服务器都是部署在Linux机器上面,可以通过jvm自带的命令进行一些检测:

(1)查看对象的数目和占用内存大小;

(2)如果需要进一步定位问题代码,那么就需要把Java程序的内存镜像导出,再具体分析了,通过如下命令导出程序的内存镜像。

250038ac341207ab4a11ce4db624daf4.png

二、CPU使用过高

1、当程序发现CPU使用过高的情况时,可以使用Windows系统的Process Explorer工具来找到CPU高消耗的线程,所以需要在Windows机器上面搭建好服务器的测试环境,尽量模拟出线上CPU飙升的情况;

2、模拟好环境后,通过任务管理器,在进程一栏中找到Java程序的进程号;

3、下载Process Explorer工具:

1341ac359d2a4c633912552ec77e5922.png

4、打开工具后,根据刚才的进程号找到进程;

5、然后右键-->Properties,再选择Threads选项卡,点进CPU排序,可以找到消耗CPU最多的那个线程;

34cfde4520dd8ca88c7187ae68dd9d8c.png

6、使用科学计算器,将十进制的线程号转成十六进制,比如493620-->78834;

7、到此已经拿到了可能出问题的进程号和线程号,接下来使用jvm内置的命令来导出Java的堆栈信息:

jstack -l >

60e977d40434490379093b9a34eadf49.png

8、打开导出的堆栈信息,并全文搜索刚刚拿到的十六进制的线程号,就可以找到出问题的代码具体位置了。

上海艾磊科技有限公司专门为企业提供IT咨询,IT外包,系统集成,以及各类IT增值服务。其中增值服务包括OFFICE 365云服务,鼎捷企业ERP管理软件,云备份,企业邮箱,无线覆盖,上网行为管理,VPN架设,网络安全服务,INTERNET接入,设备租赁, IP电话服务。

bdffaf87c0f9ada074553abb9fa58385.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值