jvm
文章平均质量分 71
阿拉斯加大闸蟹
JDcloud;ByteDance;XueQiu;YiChe;CATARC
展开
-
netty数据流堆外内存排查
背景行情服务每次在开盘与收盘期间的堆外内存都会上涨,并且需要周期性手动重启,影响到服务的稳定性排查过程1.堆外内存的计算标准此matrix(used_direct_memory)计算标准由netty统一进行计算,因此可以初步判断是由于netty分配的堆外内存导致内存上涨,并非直接有也直接调用Unsafe分配堆外内存import io.netty.util.internal.PlatformDependent; public DirectMemoryMonitor() {原创 2021-09-28 10:25:20 · 9563 阅读 · 0 评论 -
JDK8升级JDK9 HTT2 TLS问题解决之路(艰辛)
背景描述s公告服务是雪球行情的公告抓取服务,主要负责从相关网站抓取A股、港股、美股公告,调用接口发贴。数据抓取是在该业务场景是行情数据的入口,影响以后的的处理逻辑。因此,通过代理池+proxy的方式接入网络代理,规避前期发现的因为单个代理频繁请求导致IP被封的问题。但是在接入后发现网络请求的可用性并没有提高,因此进一步排查问题,找到问题提的根本原因。问题描述在未使用代理的情况下,请求结果返回http的403错误码 在使用代理的情况下,请求反馈的http的403错误码的代理应该降低。返回403错原创 2021-07-21 16:58:28 · 9088 阅读 · 1 评论 -
threadPool 线程池监控
Redis连接池不够用?这个问题回答见:lettuce 共享连接xueqiu-toolbox-spring提供了spring中Executor类型bean的默认监控:集成监控Executor的线程池参数<!-- 版本从50开始:0.0.50 --><dependency> <groupId>com.xueqiu.infra.toolbox</groupId> <artifactId>xueqiu-toolb.原创 2021-06-15 17:53:39 · 5653 阅读 · 1 评论 -
jmc&jcmd
采集jfr数据的脚本使用直接:bash dump_event_jfr.sh 1h后面是时间#!/bin/bash# dump jfr下载到本地# touch dump_event_jfr.sh ; chmod u+x dump_event_jfr.sh ; vim dump_event_jfr.sh# nohup bash dump_event_jfr.sh 1h &recordMinute=10mif [[ -n "$1" ]]; then recordMinute=$1.原创 2021-06-15 11:12:08 · 3628 阅读 · 0 评论 -
默认ForkJoinPool引发的Redis lettuceP99升高
背景:推荐系统升级RedisCluster4的SDK后,与之前的redis2.8的jedis客户端相比性能下降,具体表现在对应接口P99升高问题原因:在项目中使用了parallelStream的并行执行,其和lettuce的异步获取结果的CompletableFuture线程共用了一个ForkJoinPool解决方案:去除对于parallelStream的依赖,使用单独的线程池通过排查堆栈,发现parallelStream产生大量的ForkJoin线程,怀疑其和lettuce的fut原创 2021-03-25 14:18:41 · 5107 阅读 · 2 评论 -
Linux关于IO部分
成本:程序不能直接访问硬件:网卡、磁盘(内核来访问的)内核提供了:sysctl(软中断、硬中断)strace -ff -o ./xxx java TestSocket:抓取程序对内核有没有系统调用cd /proc/PID:进程的文件描述cd task:看有多少个线程cd fd:文件描述符(0、1、2基本描述输入 输出 错误)netstat -natp 只有服务端只有listen状态nc:可以和任何程序建立连接epoll尽量不浪费CPUsele...原创 2020-09-08 22:46:46 · 2818 阅读 · 1 评论 -
CPU和IO debug工具,方法,实践
Linux CPU 性能优化指南uptime查看系统瓶颈负载[root /home/user]# uptime 13:11:01 up 888 days, 21:33, 8 users, load average: 17.20, 14.85, 14.10lscpu查看 CPU 信息:[root@Tencent-SNG /home/user_00]# lscpuArchitecture: x86_64 CPU op-mode(s): 32-bit, 64-bit原创 2020-08-20 22:10:31 · 2508 阅读 · 0 评论 -
操作系统CPU底层
CPU:中央处理器,运算器+控制器PC:程序计数器,用来存放当前欲执行指令的地址,它与主存的MAR之间有一条直接通路,且具有自动加1的功能,即可自动形成下一条指令的地址。IR:用来存放当前的指令,IR的内容来自于主存的MDRCU:控制单元,用来解释存储器中的指令,并发出各种操作命令来执行指令ALU:算逻部件,用来完成算术逻辑运算ACC:累加器,运算器中的寄存器的一种MQ:乘商寄存器X:操作数寄存器MAR:存储器地址寄存器,用来存放欲访问的存储单元的地址,其位数对应存储单元的个数MDR:.原创 2020-08-19 22:46:31 · 2574 阅读 · 0 评论 -
JVM 堆外内存泄漏
首先开启:-XX:NativeMemoryTracking=detail然后jcmd pid VM.native_memory detail,打出内存分配信息,注意NativeMemoryTracking显示的内存不包含C++分配的内存。此处需要关注两个点:第一,Total行的committed数值是否等于进程占用的物理内存,如果不等,说明有C++等native code分配的内存,可参考Java调用C++组件分析;第二,Native Memory Tracking的committed.原创 2020-08-10 13:45:27 · 2270 阅读 · 0 评论 -
JVM 后台IO阻塞导致GC停顿时间长
AccessDatabaseEngine.exe将允许非 Microsoft Office 应用程序可以使用它们从 2007 Office system 文件中读取数据,例如从 Microsoft Office Access 2007(mdb 和 accdb)文件以及 Microsoft Office Excel 2007(xls、xlsx 和 xlsb)文件中读取数据。翻译 2017-11-09 16:12:38 · 18574 阅读 · 1 评论 -
parallelSteam高性能:并行计算惹的祸
Java 中提供了ForkJoinPool 并发流式计算框架,推荐系统中也大量使用 parallelSteam 进行业务处理,提高系统处理能力,如:批量获取StatusForkJoinPool相比之前Java6中的线程池来说使用更加方便(流式计算),Fork-Join的模式也比ThreadPoolExecutor中的BlockingQueue更友好。那么是不是所有的stream调用都应该使用parallelSteam呢?1、并发消耗更多的资源https://stackoverflo.原创 2020-05-14 16:36:52 · 3507 阅读 · 0 评论 -
系统重启时http请求量为什么会涨?
系统重启时开始QPS为0,启动后瞬间QPS达到平时2-3倍,什么情况?1、是不是监控系统显示错了?登陆到服务器上,查看日志,原始日志也是同样情况。2、是不是metric log记录的问题?在进入调用方法后记录http的metric日志(qps),调用结束后记录耗时日志(latency)。问题就在这里:系统刚启动时,系统计算资源并没有完全准备好(如Tomcat线程池),请求会在队列中排队,并没有进入到方法调用,此时统计的QPS为0;当更多线程池可以处理请求后, 队列中...原创 2020-05-14 16:32:32 · 1731 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记七
Java内存模型与线程硬件效率与一致性MSI、MESI、MOSI、Synapse、Firefly、Dragon处理器的乱序执行与Java的指令重排Java内存模型java定义了自己的内存模型JMM,来屏蔽各种硬件与操作系统的内存访问差异主内存与工作内存:Java规定所有的变量都存储在主内存内每条线程都有自己的工作内存,线程之间的变量值传递主要通过主内存完成内存间...原创 2020-01-13 21:12:07 · 754 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记六
运行时栈帧结构虚拟机字节码执行引擎:有多种实现方式,有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)栈帧(Stack Frame)虚拟机进行方法调用和执行的结构存储了局部变量表、操作数栈、动态连接和方法返回地址(在编译代码的时候就已经确定了其大小)局部变量表局部变量表十一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量在java被编译为...原创 2019-12-25 19:55:29 · 647 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记五
虚拟机类加载机制类加载的时机类被加载到虚拟机内存开始到结束过程,七个阶段:加载→验证→准备→解析→初始化→使用→卸载除了解析和使用,其他五个顺序按部就班执行加载:虚拟机没有强行约束加载和验证交叉进行,但仍然保持着固定的先后顺序加载阶段,虚拟机需要三件事:通过一个类的全限定名来获取定义此类的二进制流(可以是:jar包、applet运行容器、动态代理、JSP、数据库字节...原创 2019-11-19 20:58:56 · 581 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记四
调优案例分析与实战32位问题:内存回收导致的长时间停顿,譬如十几个小时乃至一天才出现一次Full GC放在深夜执行现阶段64位JDK性能测试普遍低于32位相同程序在64位JDK中消耗的内存一般比32位JDK大,由于指针膨胀及数据类型对齐补白造成集群间同步导致内存溢出:集中的缓存JBossCache出现内存溢出,-XX:+HeapDumpOnOutOfMemoryError打...原创 2019-10-18 17:06:40 · 586 阅读 · 0 评论 -
jvm crash排查(JDK版本bug find过程)
目录前言:1.问题背景2.排查过程2.1 crash log概要2.2 crash log分析2.2.1 手工分析2.2.2 工具分析2.3 问题排查3.当前结论参考链接:内容是在我球的docs上直接复制过来的,懒得写两份,资源缺少的留言,我发你前言:文中部分链接需要cross greatwall。1.问题背景时间:2019-04-03...原创 2019-04-12 13:16:30 · 3646 阅读 · 0 评论 -
JVM远程调试搭建心得体会
远程调试为什么需要进行远程调试: 一些程序本地测试没有问题,但是一到线上或者测试环境中就会出现各种bug,但是线上环境又没有IDE,没有办法在线上进行调试,这个时候就需要远程调试来对线上问题进行排查。 1.远程调试流程1.1 Idea远程调试 [Run]->[Edit Configurations]->[+]->[Remote] 起一个应用的名称,一般...原创 2019-03-04 11:01:08 · 871 阅读 · 0 评论 -
JVM的安全管理
本文涉及的代码在github上:https://github.com/singgel/eight-sorting-algorithms/tree/master/src/test/java/com/hks/eightsortingalgorithms/securityManagerjava的沙箱在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱,什么是jav...原创 2018-08-20 17:10:26 · 497 阅读 · 0 评论 -
Java程序内存分析:使用mat工具分析内存占用
摘要: MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件。但是比较主流的厂家和格式,例如 Sun, HP, SAP 所采用的 HPROF 二进制堆存储文件,以及 IBM 的 PHD 堆存储文件等都能被很好的解析。 MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件。但是比较主流的厂家和格式,例如 Sun, HP, SAP 所采用的 HPROF 二进制堆存...转载 2018-03-28 14:30:10 · 855 阅读 · 0 评论 -
JVM类装载体系结构
本文章涉及的代码在github上:https://github.com/singgel/eight-sorting-algorithms/tree/master/src/test/java/com/hks/eightsortingalgorithms/classLoaderJVM的class转载方式java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行...原创 2015-07-13 19:57:19 · 1308 阅读 · 0 评论 -
JVM性能测试实践回忆总结
内容的出处来自于我球的一位同事的总结,很全易懂,如果你喜欢开源社区且是contributor欢迎砸你的简历过来hekuangsheng@gmail.com目录一、jstat查看jvm的统计信息1、类加载信息2、垃圾回收信息(动态的看到垃圾回收信息)3、JIT编译信息二、jmap+MAT抓取jvm内存快照(内存溢出、内存泄漏)1、设置堆的最大内存 最小内存2...原创 2019-04-19 14:20:48 · 1027 阅读 · 0 评论 -
Linux线上CPU占用过高排查
问题是这样的,将项目部署到服务器上后,发现应用程序的响应速度非常慢,于是开始进行了排查。TOP首先查看系统资源占用信息,TOP看一下发现正在运行的JAVA项目CPU占用率很高,百分之110左右了,那么问题一定出在这个程序中Ps -mp pid -o THREAD,tid,time再通过ps命令查看这个程序的线程信息,tid代码线程ID,time代表这个线程的已运行时间由...原创 2019-02-13 14:38:09 · 1469 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记一
目录运行时数据区域对象访问OutOfMemoryError异常对象存亡判断技术到了一定的程度,总是想要进一步的提高,但是有时候苦于网上的资料参差不齐,有些更是让人只知其表,我本人是找不到比较好的方法来打开新的道路。又苦于前方路途迷茫,有时也是看着各大V推荐的书籍进行阅读,和在学校一样,读书读不进去,写代码倒是飞快。开了blog,那就一点一滴记录下来吧书籍地址:https:...原创 2017-03-17 09:04:41 · 349 阅读 · 0 评论 -
《深入理解java虚拟机》读书笔记二
目录垃圾收集算法垃圾收集器内存分配与回收策略技术到了一定的程度,总是想要进一步的提高,但是有时候苦于网上的资料参差不齐,有些更是让人只知其表,我本人是找不到比较好的方法来打开新的道路。又苦于前方路途迷茫,有时也是看着各大V推荐的书籍进行阅读,和在学校一样,读书读不进去,写代码倒是飞快。开了blog,那就一点一滴记录下来吧书籍地址:https://github.com/s...原创 2017-05-03 13:43:32 · 293 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记二
目录垃圾收集算法垃圾收集器内存分配与回收策略技术到了一定的程度,总是想要进一步的提高,但是有时候苦于网上的资料参差不齐,有些更是让人只知其表,我本人是找不到比较好的方法来打开新的道路。又苦于前方路途迷茫,有时也是看着各大V推荐的书籍进行阅读,和在学校一样,读书读不进去,写代码倒是飞快。开了blog,那就一点一滴记录下来吧书籍地址:https://github.com/s...原创 2019-10-09 20:57:38 · 485 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记三
JDK命令行工具jps:虚拟机进程状况工具显示执行主类所在函数的类名,显示本地虚拟机唯一ID(LVMID)jstat:虚拟机统计信息监视工具用于监视各种运行信息显示本地或远程虚拟机进程中:类装载、内存、垃圾收集、JIT编译等运行数据运行期定位虚拟机性能问题首选工具jinfo:java配置信息工具实时查看和调整虚拟机各项参数,也可以使用java -XX:+PrintF...原创 2019-10-09 20:58:28 · 580 阅读 · 0 评论 -
JVM性能调优实战
目录一、调优标准二、调优步骤1.监控GC的状态2.生成堆的dump文件3.分析dump文件4.分析结果,判断是否需要优化5.调整GC类型和内存分配6.不断的分析和调整三、调优参考内容是在我球的docs上直接复制过来的,懒得写两份,资源缺少的留言,我发你一、调优标准1.Minor GC执行时间不到50ms;2.Minor GC执行不频繁,约10秒一...原创 2019-04-19 11:51:22 · 451 阅读 · 0 评论