首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线上应用故障排查之二:内存占用

前一篇介绍了线上应用故障排查之一:CPU占用,这篇主要分析内存占用故障的排查。...,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节。...现在以一个实际的例子分析内存占用的故障排查。 通过top命令,发现PID为9004的Java进程一直占用比较高的内存不释放(24.7%),出现内存占用的故障。...想起上一篇线上应用故障排查之一:CPU占用介绍的PS命令,能否找到具体是哪个的线程呢?...特别是占用了大量内存的int数组,需要仔细检查相关代码。 最后,总结下排查内存故障的方法和技巧有哪些: 1、top命令:Linux命令。可以查看实时的内存使用情况。

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    内存溢出排查

    继续...... 3、 内存调优,减小xss值、JVM内存,仍然解决不了。      ...TestNativeOutOfMemoryError.java:20)   问题重现,在反复运行几次后发现,生产系统最大只能创建980多个线程,生产系统操作系统64位centeros,jdk1.7,64G内存...$ su Bst118   $ ulimit -u   $ 1024   生产上所有程序都是在Bst118账户下运行,于是查看该账户下所有的线程数总和为950,也即是说,随时都可能会超过1024,导致内存溢出...于是增加一条:Bst118     soft    nproc     20000   为什么设置为20000,因为测试后发现,在运行到35000左右,系统就报内存溢出了,操作系统所有命令都不能使用,因此将程序最大线程数限制在...修改后再没出现内存溢出错误。问题解决。 三、思考   1、经过总结,在遇到问题后,不能盲目的到处修改,首先要做的就是重现问题,顺藤摸瓜,逐步的找出根本原因。

    21940

    skywalking内存泄露排查

    背景介绍 最近写的关于dubbo内存泄露稍微复杂了一点,很多人表示看不明白,想到之前遇到的比较简单的内存泄露问题,更容易入门,于是拿出来分享一下。...问题排查 由于当时对系统的操作只有开启了降级规则,于是立马删除规则并重启,系统恢复,但并没有保存一份内存的dump文件。想着如果问题能复现就好查了,在当初的预发机器上试了一下,并没有复现。...能复现就好办,赶紧dump内存,很多人不知道怎么dump java的内存文件,可以使用jdk自带的jmap命令来dump,使用jmap dump内存时会触发一次full GC,所以线上使用要谨慎,full...以经验来看,内存泄露问题都会伴随着cpu升高,因为内存不够使用触发full GC,但full GC又无法释放内存,恶性循环,所以一开始并没有去看cpu的问题。...总结 内存泄露问题伴随着cpu,错误率,GC频繁等问题 内存泄露最重要的是拿到现场内存dump文件,并用工具结合源码分析 如果第二条解决不了问题,则需要寻找新的突破口,比如jstack等

    4K31

    内存泄漏排查

    什么是内存泄漏 内存泄漏:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。...如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。 在C++中,内存泄漏的范围更大一些。...就是这种情况导致了内存泄漏。 】专 详细解读 1.Java回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。...因为栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区 :又称动态内存分配,通常就是指在程序运行时直接 new 出来的内存,也就是对象的实例。...了解了 Java 的内存分配之后,我们再来看看 Java 是怎么管理内存的。 3.2 Java如何管理内存 Java的内存管理就是对象的分配和释放问题。

    42620

    【玩转服务器】Linux服务器内存占用排查方法

    当Linux服务器内存占用时,可以按照以下步骤进行排查: 查看内存使用情况 使用free命令可以查看系统的内存使用情况,包括总内存、已用内存、空闲内存等信息。...有时系统内存占用可能是由缓存和缓冲区所导致的。Linux系统会利用未分配的内存作为缓存和缓冲区,以提高文件访问速度。...20 0 164896 9496 2080 S 0.0 0.5 0:00.53 barad_agent 查看系统日志 查看系统日志可以帮助定位内存占用的原因...slab内存 查看不可回收的slab内存占用情况,如果这部分内存占用较高,可以使用slabtop命令查看是哪些slab占用大。...总结 在实际应用中,某个进程占用内存过高可能问题并非出在程序本身,如 mysql 占用内存过高,则有可能是程序代码中 sql 语句不够优化导致,所以排查要从全局出发,考虑系统整体资源占用情况。

    2.1K31

    排查Java的内存问题

    核心要点 排查Java的内存问题可能会非常困难,但是正确的方法和适当的工具能够极大地简化这一过程; Java HotSpot JVM会报告各种OutOfMemoryError信息,清晰地理解这些错误信息非常重要...,在我们的工具箱中有各种诊断和排查问题的工具,它们能够帮助我们诊断并找到这些问题的根本原因; 在本文中,我们会介绍各种诊断工具,在解决内存问题的时候,它们是非常有用的,包括: HeapDumpOnOutOfMemoryError...请注意,最好始终启用GC日志,即便在生产环境也如此,在出现内存问题时,这样有助于探测和排查。...关于如何诊断、排查和解决该问题,请参阅该文了解更详细的信息。 原生堆:诊断工具 让我们看一下内存泄露的探查工具,它们能够帮助我们找到原生内存泄露的原因。...总结 排查内存问题可能会非常困难和棘手,但是正确的方法和适当的工具能够极大地简化这一过程。

    2.8K50

    使用windbg排查内存泄漏

    一、背景   近期有一个项目在运行当中出现一些问题,程序顺利启动,但是观察一阵子后发现内存使用总量在很缓慢地升高, 虽然偶尔还会往下降一些,但是总体还是不断上升;内存运行6个小时候从33M上升到80M;...其他同事也身兼数职,不大可能有时间调试, 那项目推进肯定停滞;那没办法了,只能硬着头皮上;网上了解一番,对于这种内存泄漏问题,比较好的处理方式就是 抓取内存快照,然后分析数据提交记录,使用查看使用堆栈等信息...heap -s,查看各种堆的内存提交数据量 33.dmp 0:047> !...;尤其以内存块大小为1f0的数据块使用最多内存; 到目前为止,我们知道了几项有效信息,有大小分别为1f0、18、10的三种数据块,不断申请出新空间; 但是这样还不够,根据一个内存块的大小并不能准确定位是哪里出了问题...但是仔细一想,好像也是正常,因为这些是可以明确的在C语言编写的动态库里申请的内存,属于不受托管的内存; C#垃圾回收也只能回收托管内存,所以这部分数据不主动释放,那就会永远在那里; 但是现在,好像陷入死胡同了

    3.3K20

    JVM内存分析排查工具

    ,查看堆空间占用情况 第三步:导出dump内存溢出的文件,导入到jvisualvm查看 2、CPU使用猛增,这个问题如何排查?...第一步:运行代码,使用top命令查看cpu占用情况 第二步:使用top -p 命令查看飙进程 第三步:按H,获取每个线程的内存情况 第四步:找到内存和cpu占用最高的线程tid 第五步:将线程tid转化为十六进制...第六步:执行[ jstack 4018360|grep -A 10 67187778] 查询飙线程的堆栈信息 第七步:查看对应的堆栈信息找出可能存在问题的代码 3、进程有死锁,这个问题如何排查?...内存溢出,出现OutOfMemoryError,这个问题如何排查 CPU使用猛增,这个问题如何排查?进程有死锁,这个问题如何排查?...通过这个可以排查出哪个实例对象引起的内存溢出。 除此之外,Total汇总数据可以看出当前一共有多少个对象,暂用了多大内存空间。

    1.1K31

    Linux负载排查最佳实践

    那么如何进行排查,其实是有迹可循,而且模式固定。 本次就来分享一下,CPU占用过高、磁盘IO占用过高的排查方法。 CPU占用率过高问题排查 使用mpstat查看cpu使用情况。...75.54 0.00 90.76 0 |__mysqld 可以很清楚看到是 10850 线程消耗了 CPU 资源,剩下的就根据操作系统的里线程 ID,去 MySQL 数据库里排查...): 可以对 Linux 操作系统的虚拟内存、进程、IO 读写情况、CPU 活动等展示概要监控信息,缺点是无法对某个进程进行深入分析。...,如果大于 0,代表物理内存不足,需要排查是什么进程导致物理不足 * si:每秒从磁盘读入虚拟内存的大小,这个值大于 0,代表物理内存不足,需要排查是什么进程导致物理不足 * so:每秒虚拟内存写入磁盘的大小...,这个值大于 0,代表物理内存不足,需要排查是什么进程导致物理不足 * us、sy、id:代表着服务器 CPU 的繁忙程度,如果 id 值越小,表示 CPU 越繁忙 2. top工具 top 是一款 Linux

    35510

    实战:Redis负载排查记录

    然而,在某些情况下,我们可能会遭遇Redis负载的问题,这时就需要进行相应的排查和解决。本文将介绍一个真实场景下的Redis负载排查记录,希望对大家解决Redis负载问题提供一些参考。...这两个指标都表明了Redis存在负载的问题。第二步:查看slowlog在排查Redis负载问题时,我们还可以通过查看slowlog(慢查询日志)来找到Redis主要耗时操作。...这也是Redis出现负载的重要原因之一。第四步:查看Redis配置和性能参数在排查Redis负载问题时,我们还需要查看Redis的配置和性能参数,以确定是否存在不合理的设置。...解决方案在排查Redis负载问题后,我们需要采取一些解决方案来解决这个问题。...总结本文介绍了一个真实场景下的Redis负载排查记录,从CPU使用率、QPS、slowlog、内存使用情况、配置和性能参数、客户端请求情况等多个方面来查找Redis负载问题。

    94341

    面试杂谈 - 内存泄漏如何排查

    内存里的对象从生到死,井然有序。但由于一些人为的失误,往往会让一些对象逃过GC的制裁,跳出GC外,不在垃圾中。这个时候,内存泄漏就发生了。...内存泄露,是指程序在申请内存并且用完这块内存后(对象不再需要了),没有释放已申请的内存空间。少数偶然的内存泄漏,虽然不太好,但问题不大,我们也不至于对那点内存抠抠搜搜的。...但如果是内存不断泄漏,直到新的对象没有足够的空间生成,就会导致OOM。...什么时候可能内存泄漏 抛出OOM异常 当程序抛出OutOfMemoryError,如果你自认不是太抠,给了这个程序足够的空间,那么可以怀疑有内存泄漏 内存持续上升 一个健康的程序应该有平稳的新陈代谢,内存占用应该维持在一定范围...但如果内存持续飙升,甚至到达了一个危险的值,那么可以怀疑有内存泄漏。

    1.2K10

    Linux 内存使用过高排查

    系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。...: total 内存总数 used 已经使用的内存数,一般情况这个值会比较大,因为这个值包括了cache 应用程序使用的内存 free 空闲的内存数 shared 多个进程共享的内存总额 buffers...当发生内存不足、应用获取不到可用内存、OOM错 误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可 能只是把问题给暂时屏蔽了...1、cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 ....而Linux会充分利用这些空闲的内存,设计思想是内存空闲还不如拿来多缓存一些数据,等下次程序再次访问这些数据速度就快了,而如果程序要使用内存而系统中内存又不足时,这时不是使用交换分区,而是快速回收部分缓存

    9.5K31

    内存泄露排查之线程泄露

    基础 内存泄露(Memory Leak) java中内存都是由jvm管理,垃圾回收由gc负责,所以一般情况下不会出现内存泄露问题,所以容易被大家忽略。...内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。...刚开始走的错误弯路 刚开始发现机器内存占用比较多,超过80%+,这个时候思考和内存相关的逻辑 这个时候并没有去观察线程数量,根据现象 1、2、4,、这个过程没有发现现象3,排查无果后,重新定位问题发现现象...3 由于现象4中的错误日志比较多,加上内存占用,产生了如下想法(由于本例中很多服务通过mq消费开始) 现象4中的错误导致mq重试队列任务增加,积压的消息导致mq消费队列任务增加,最终导致内存上升 由于异常...(这里图是重启之后一段时间的)但是cpu占用率比较高,很快就降下去了,这里耽误了一下时间,top -Hp pid,确认那个线程占用率,jstack看了下对应的线程在作甚 ?

    2.8K40
    领券