今天排查生产机器内存使用率持续升高的问题时,准备使用jmap dump命令生成堆内存快照文件,然后下载到本地使用MAT工具分析,查看到底是哪块代码导致的对象持续增多并且无法回收,我大概描述下问题:因为机器的内存使用率持续升高,导致java服务时隔一段时间又被重新启动。这篇文章不会详细讲解如何分析这个问题,主要是讲讲我在使用jmap dump遇到的一个问题:在生产机器上生成的dump快照文件比较大(七八百M),使用sz命令下载的时候会失败。我也会描述我在整个操作过程中遇到的一个个的小问题。

一、简单介绍我的操作过程

这块主要是讲下我的操作过程,如果只看问题的解决方案可以直接跳到后面,如果有需要的也可以一起学习一下相关操作命令。这里我假设大家都知道如何登陆生产机、有一定排查机器问题的基础,知道jmap以及相关的命令,所以不做太多额外的内容讲解。

① 登陆到机器,准备使用如下命令查看是哪个服务进程内存使用率比较高:

top -c  // -c 参数显示进程对应的服务名,非常方便知道是哪个应用

② 根据进程号,使用jmap查看进程对应的java服务的对象生成分布情况(非docker部署的服务)

发现出现这个错误,最直接的原因是识别不到jdk环境,所以无法使用jmap命令,但是我们使用java -version还是可以看到生产机器是有jdk环境的,这时我们就需要切换到jdk的bin目录下才可以使用相应的java命令,所以我们就得找到机器安装的jdk目录,以及进入到对应的目录下:

根据上面几个命令,就可以顺利进入到bin目录,可以看到java相关命令都在这里面,其中就有我们要用的jmap命令,现在我们可以再使用上面的jmap命令查看对象分布情况:

jmap命令有很多参数,我这用的是-histo:查看堆中对象数量和大小,大家可以网上学习其他的参数,其中 head -20 意思是显示排在最前的20条数据,因为jmap打印出来的信息非常多,后面占内存少的对象信息也没必要打印出来占位置。另外注意这里进入到bin目录使用的命令是 ./jmap 而不是直接的jmap,直接使用jmap还是不行。

③ 使用jmap dump生成对应的快照文件

./jmap -dump:format=b,file=/tmp/heapDump20210219.hpof 28724

注意:1.我这里准备使用MAT工具进行分析,所以生成的快照文件格式后缀需要是.hpof,不然MAT工具无法打开,如果你准备使用jdk自带的jvisualvm的话则生成.dump文件,这里不详细说

2.我这里生成的文件是/tmp目录下,因为存在当前登录用户在当前目录无权限创建文件等问题,所以放在了/tmp目录下。

④我们进入到/tmp目录查看生成的文件

我用的是ls -lh 命令,这个命令可以直观的看到文件的大小,并且单位会显示为K、M和G,非常直观,如果使用的是 ll 命令则单位是字节,是一长串的数字。

⑤最开始我是直接使用sz heapDump20210219.hpof 来下载到本地,但是因为文件太大,会出现莫名其妙问题,下载一会后 iTerm2 页面会疯狂刷乱码,一直刷。然后我将文件压缩,再下载

// 压缩文件命令
tar zcvf heapDump20210219.tar.gz  heapDump20210219.hpof

可以看到压缩后,文件从530M 压缩到 75M

⑥然后再使用 sz heapDump20210219.tar.gz 进行下载,还是会有问题,文件还是大了,问题现象就是:可以正常显示下载中,但是呢下着下着 命令行显示成功了,但是本地的文件消失了,所以还是下载不了,文件太大

二、文件太大,无法使用sz命令下载解决办法

核心思想:拆!既然文件太大了,那就把文件拆成几个小文件,再一个一个的下载下来!

① 拆成小文件:我这里每个小文件拆成10M

cat heapDump20210219.tar.gz | split -b 10M - heapDump20210219.tar.gz.

可以看到linux自动根据我们给的前缀,拼成完整的拆分后的文件名:*.gz.aa、*.gz.ab, *.gz.a....

②将所有拆分后的小文件下载到本地

sz heapDump20210219.tar.gz.a*

这里不用一个一个的使用sz,直接用上面命令就可以了,可以看到我指定的本地目录就有对应的小文件了

③合并本地的多个小文件,这时重开一个终端进入到本地对应目录

然后我们只需要解压,使用MAT工具打开就可以进行使用和分析了!

到这里本篇文章就结束啦,希望对你有所帮助!感谢阅读~

如何使用sz命令下载较大文件到本地相关推荐

  1. secureCRT 使用 rz 命令上传大文件失败出现乱码

    linux shell rz和sz是终端下常用的文件传输命令,rz和sz通过shell被调用,其中rz用于从启用终端的系统上传文件到目标系统(终端登录的目标系统), 这里不过多介绍这些命令,只是记录一 ...

  2. linux dd 截文件,Linux使用dd命令快速生成大文件(转)

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  3. Linux dd命令截取文件,linux使用dd命令快速生成大文件

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  4. linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...

    原文数据: 无 具体要求: 1. 模拟Linux的dd命令快速创建大文件 代码实现: # -*- coding: utf-8 -*- """ # # Authors: l ...

  5. Mac上下载百度云盘大文件百度云盘客户端限速怎么处理

    1.在Safari中找到你要下载的东西,停留在那个界面上 2.然后 到 Safari->开发->用户代理 选择Internet  Explorer11 然后选择你要下载的大文件,点击下载 ...

  6. linux 打开大文件命令,linux下大文件的读取

    最近遇到的现实问题就是经常需要读取大小超过1G的大文本文件.常规的软件或者方法基本上无能为力.在网上找了好多方法,汇总一下最好的,分享. 1)如果是在windows下读取这种大文件的话,只找到一个叫l ...

  7. Linux使用dd命令快速生成大文件

    dd命令可以轻易实现创建指定大小的文件,如   dd if=/dev/zero of=test bs=1M count=1000   会生成一个1000M的test文件,文件内容为全0(因从/dev/ ...

  8. dd命令创建一个大文件

    dd命令可以创建指定大小的文件 命令: dd if=/dev/zero of=test bs=1M count=1000 会在当前目录下生成一个大小为1M*1000=1000M大小的test.img文 ...

  9. 实现微信小程序web-view内嵌H5中的下载功能(大文件切片下载)

    实现微信小程序内嵌H5中的下载功能 一.项目场景: 难点 解决方案: 1.H5微信小程序: a.首先必不可少的是安装jweixin-module模块: b.在main.js中将依赖绑定: c.H5对应 ...

最新文章

  1. linux网卡绑定脚本
  2. OSPF协议将其管理的网络划分为不同类型的若干区域(Area),其中标准区域特点是(64);存根区域(stub)的特点是(65)。【答案】C B
  3. CSS3 background-size图片自适应
  4. 【数据挖掘】数据挖掘总结 ( 拉普拉斯修正 | 贝叶斯分类器示例2 ) ★
  5. 捕获计算机屏幕++方法,如何在Windows 10计算机上录制屏幕以及如何捕获计算机的音频...
  6. Oracle 建立包 和 包体
  7. Introduce Explaining Variable(引入解释性变量)
  8. 2017-2018-1 20155213 《信息安全系统设计基础》第十一周学习总结
  9. js 文本加密 php解密,JavaScript加密和PHP解密
  10. 【Linux 驱动】第十章 中断处理
  11. Oracle技术之和外键相关的阻塞和死锁问题总结(一)
  12. leetcode 31. Next Permutation(字典序的下一个)
  13. 使用高效代理抓取58同城巴州二手房信息并保存至excel
  14. 关于阿拉qq大盗屏蔽winhex之后的破解.
  15. 宏碁e5-572g重装linux,Acer-E5-572G笔记本U盘装原版win10系统教程
  16. 苹果库乐队怎么玩_苹果手机如何自定义铃声?这个方法最简单。
  17. Linux系统swap分区扩容,swap分区扩容
  18. Linux 只查找两层备份目录文件大小
  19. 安装iso格式的软件安装程序
  20. 多个div水平横向排列

热门文章

  1. Java使用aopse实现word转换pdf
  2. ARMCortex系列仿真调试器
  3. nc命令卡住不返回的分析
  4. Win10注销在哪?怎么注销电脑
  5. 什么是SSL协议 SSL协议的实现方式
  6. 花旗银行java面试_花旗金融—面经(已offer)
  7. 云原生Tekton之触发器Trigger
  8. UI设计的15个设计要点,让你的作品更完美
  9. 自动驾驶汽车如何有助于可持续移动规划?
  10. BP神经网络的详细推导 与 完整代码