<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tony的专栏]]></title><description><![CDATA[好好学习，多多益善]]></description><link>https://blog.youkuaiyun.com/achuo</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; achuo]]></copyright><item><title><![CDATA[快速定位java系统线上问题]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/116430985</link><guid>https://blog.youkuaiyun.com/achuo/article/details/116430985</guid><author>achuo</author><pubDate>Wed, 05 May 2021 21:45:29 +0800</pubDate><description><![CDATA[一、前言

Java 语言是当前互联网应用最为广泛的语言，作为一名 Java 程序猿，当业务相对比较稳定之后平常工作除了 coding 之外，大部分时间（70%~80%）是会用来排查突发或者周期性的线上问题。

由于业务应用 bug(本身或引入第三方库)、环境原因、硬件问题等原因，Java 线上服务出现故障 / 问题几乎不可避免。例如，常见的现象包括部分请求超时、用户明显感受到系统发生卡顿等等。

尽快线上问题从系统表象来看非常明显，但排查深究其发生的原因还是比较困难的，因此对开发测试或者是运维的同学产生了]]></description><category></category></item><item><title><![CDATA[给我说说你对Java GC机制的理解？]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/115682169</link><guid>https://blog.youkuaiyun.com/achuo/article/details/115682169</guid><author>achuo</author><pubDate>Tue, 13 Apr 2021 23:25:12 +0800</pubDate><description><![CDATA[写在前面
使用Java快一年时间了，从最早大学时候对Java的憎恶，到逐渐接受，到工作中体会到了Java开发的各种便捷与福利，这确实是一门不错的开发语言。不仅是 Intellij开发Java程序的爽快，还有无需手动管理内存的便捷、 Maven管理依赖的整洁、 SpringCloud大礼包的规整等等。
所以，作为一个有追求的Java程序员，深入底层掌握 GC（垃圾回收）的机制，应该算是必备的技能了。本文即我在学习过程中的一些个人观点以及心得，不正之处敬请指正。
JVM的运行数据区
首先我简单来画一张 JVM的]]></description><category></category></item><item><title><![CDATA[Linux SWAP 深度解读]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/109592000</link><guid>https://blog.youkuaiyun.com/achuo/article/details/109592000</guid><author>achuo</author><pubDate>Tue, 10 Nov 2020 09:23:15 +0800</pubDate><description><![CDATA[swap、swappiness及kswapd原理，swap分区优先级的妙用。

真可谓一文在手，SWAP从此不再忧愁。敬请笑纳。

概述

本文讨论的swap基于Linux4.4内核代码。Linux内存管理是一套非常复杂的系统，而swap只是其中一个很小的处理逻辑。

希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文，应该可以帮你解决以下问题：

1、swap到底是干嘛的？

2、swappiness到底是用来调节什么的？

3、kswapd什么时候会进行swap操作？

...]]></description><category></category></item><item><title><![CDATA[jvm性能调常用工具Jinfo Jstat Jmap Jstack jvisualvm]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/108623608</link><guid>https://blog.youkuaiyun.com/achuo/article/details/108623608</guid><author>achuo</author><pubDate>Wed, 16 Sep 2020 15:42:12 +0800</pubDate><description><![CDATA[jinfo使用


可以查看java的系统参数

可以查看某个JVM的参数

可以调整某个JVM的参数


查看jvm的参数






	λ jps
	
	
	9920 jar
	
	
	3524
	
	
	1512 Launcher
	
	
	10028 Jps
	
	
	λ jinfo -flags 9920
	
	
	Attaching to process ID 9920, please wait...
	
	
	Debugger attached successfully.
	
	
	Ser..]]></description><category></category></item><item><title><![CDATA[性能瓶颈--MEM（swap）]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/108536887</link><guid>https://blog.youkuaiyun.com/achuo/article/details/108536887</guid><author>achuo</author><pubDate>Fri, 11 Sep 2020 16:17:14 +0800</pubDate><description><![CDATA[内存的性能瓶颈主要集中在两点，一个是内存不足，一个是没有充分的利用buffer/cache 。
这里先介绍内存资源不足吧，毕竟应用程序不在 buffer/cache 里读写的可能性不大，除非程序员自己设置直接I/O。否则至少也用的是缓存I/O。当然一些动态链接库也有自己的缓存。

内存回收

当有内存资源不足的时候，就会导致内存回收，也就是释放掉回收的内存，比如buffer/cache 就属于可回收内存，他们在内存管理中叫做文件页（File-backend Page）。大部分的文件页都可以直接回收，以后有需]]></description><category></category></item><item><title><![CDATA[linux 查看哪些进程用了swap]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/108536488</link><guid>https://blog.youkuaiyun.com/achuo/article/details/108536488</guid><author>achuo</author><pubDate>Fri, 11 Sep 2020 16:03:47 +0800</pubDate><description><![CDATA[如果系统的物理内存用光了，则会用到swap。系统就会跑得很慢，但仍能运行;如果Swap空间用光了，那么系统就会发生错误。通常会出现“application is out of memory”的错误，严重时会造成服务进程的死锁。所以要高度重视。

swap查看有很多种方法，一一介绍下：

free



free -m



就能看出当前系统所使用的swap了。那么如何查看哪些进程使用了swap呢，这样好针对性的做出优化。



top

Centos（6.0之前）：

top只能看到swap总使用量

..]]></description><category></category></item><item><title><![CDATA[Java性能优化必知的50个细节（珍藏版）：Jvm调优+MySQL+Tomcat]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/108359530</link><guid>https://blog.youkuaiyun.com/achuo/article/details/108359530</guid><author>achuo</author><pubDate>Wed, 02 Sep 2020 11:54:33 +0800</pubDate><description><![CDATA[在JAVA程序中，性能问题的大部分原因并不在于JAVA语言，而是程序本身。养成良好的编码习惯非常重要，能够显著地提升程序性能。文末有整理好的相关面试文件，可以免费获取。

性能优化的50个细节

1. 尽量在合适的场合使用单例

使用单例可以减轻加载的负担，缩短加载的时间，提高加载的效率，但并不是所有地方都适用于单例，简单来说，单例主要适用于以下三个方面：


第一，控制资源的使用，通过线程同步来控制资源的并发访问；

第二，控制实例的产生，以达到节约资源的目的；

第三，控制数据共享，在不建立直接关联的条]]></description><category></category></item><item><title><![CDATA[mat（Eclipse Memory Analyzer tool）之二--heap dump分析]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/108357682</link><guid>https://blog.youkuaiyun.com/achuo/article/details/108357682</guid><author>achuo</author><pubDate>Wed, 02 Sep 2020 10:41:48 +0800</pubDate><description><![CDATA[在工作中可能会遇到内存溢出这种灾难性的问题，那么程序肯定是存在问题，找出问题至关重要，上一篇文章讲了jmap命令的使用方法，当然用jmap导出的文件我们也看不懂啊，那就交给memory analyzer(mat)这个工具，让他帮助我们来观察程序的内存分布情况吧。


MAT 不是一个万能工具，它并不能处理所有类型的堆存储文件。但是比较主流的厂家和格式，例如 Sun, HP, SAP 所采用的 HPROF 二进制堆存储文件，以及 IBM 的 PHD 堆存储文件等都能被很好的解析。下面来看看要怎么做呢，...]]></description><category></category></item><item><title><![CDATA[JVM系列之五：垃圾回收]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/108268749</link><guid>https://blog.youkuaiyun.com/achuo/article/details/108268749</guid><author>achuo</author><pubDate>Thu, 27 Aug 2020 21:14:36 +0800</pubDate><description><![CDATA[0. 垃圾回收机制

　　1. C/C++需要程序员显式垃圾回收。　　


显式垃圾回收两大缺点：
1. 内存泄漏：程序忘记及时回收无用内存，从而导致内存泄漏，降低系统性能。
2. 错误回收：程序错误地回收系统核心类库的内存，从而导致系统崩溃。

　　2. Java由JRE在后台自动进行。　


JRE会提供一个后台线程来进行检测和控制，一般都是在CPU空闲或者内存不足时自动进行垃圾回收。

JAVA虚拟机垃圾回收
优点：
    1. 大大缩短编程时间，提高编程效率。
    2. 保护程序的完整性，是安]]></description><category></category></item><item><title><![CDATA[Java系列笔记(4) - JVM监控与调优]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107966460</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107966460</guid><author>achuo</author><pubDate>Wed, 12 Aug 2020 20:51:57 +0800</pubDate><description><![CDATA[光说不练假把式，学习Java GC机制的目的是为了实用，也就是为了在JVM出现问题时分析原因并解决之。通过学习，我觉得JVM监控与调优主要的着眼点在于如何配置、如何监控、如何优化3点上。下面就将针对这3点进行学习。
（如果您对Java的内存区域划分和内存回收机制尚不明确，那在阅读本文前，请先阅读我的前一篇博客《Java系列笔记(3) - Java 内存区域和GC机制》，在该博客中，详细叙述了Java HotSpot虚拟机（Sun/Oracle JDK系列默认的虚拟机）的内存分配和垃圾回收机制。本文...]]></description><category></category></item><item><title><![CDATA[Java系列笔记(3) - Java 内存区域和GC机制]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107966277</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107966277</guid><author>achuo</author><pubDate>Wed, 12 Aug 2020 20:44:06 +0800</pubDate><description><![CDATA[Java垃圾回收概况

　　Java GC（Garbage Collection，垃圾收集，垃圾回收）机制，是Java与C++/C的主要区别之一，作为Java开发者，一般不需要专门编写内存回收和垃圾清理代码，对内存泄露和溢出的问题，也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中，存在自动内存管理和垃圾清扫机制。概括地说，该机制对JVM（Java Virtual Machine）中的内存进行标记，并确定哪些内存需要回收，根据一定的回收策略，自动的回收内存，永不停息（Nerver Stop）的保证J]]></description><category></category></item><item><title><![CDATA[jvm优化—— 图解垃圾回收]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107965673</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107965673</guid><author>achuo</author><pubDate>Wed, 12 Aug 2020 20:11:20 +0800</pubDate><description><![CDATA[从这篇开始我们开始探讨一些jvm调优的问题。在jvm调优中一个离不开的重点是垃圾回收，当垃圾回收成为系统达到更高并发量的瓶颈时，我们就需要对jvm中如果进行“自动化”垃圾回收技术实施必要的监控和调节。

这是jvm优化系列第一篇，其他请看以下：


jvm优化必知系列——监控工具


对于调优之前，我们必须要了解其运行原理，java 的垃圾收集Garbage Collection 通常被称为“GC”，它诞生于1960年 MIT 的 Lisp 语言，经过半个多世纪，目前已经十分成熟了。因此本篇主要从这三个方面]]></description><category></category></item><item><title><![CDATA[jvm优化必知系列——监控工具]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107965654</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107965654</guid><author>achuo</author><pubDate>Wed, 12 Aug 2020 20:09:58 +0800</pubDate><description><![CDATA[这是jvm优化系列第二篇：


jvm优化——垃圾回收




通过上一篇的jvm垃圾回收知识，我们了解了jvm对内存分配以及垃圾回收是怎么来处理的。理论是指导实践的工具，有了理论指导，定位问题的时候，知识和经验是关键基础，数据可以为我们提供依据。

在常见的线上问题时候，我们多数会遇到以下问题：


内存泄露
	某个进程突然cpu飙升
	线程死锁
	响应变慢...等等其他问题。


如果遇到了以上这种问题，在线下可以有各种本地工具支持查看，但到线上了，就没有这么多的本地调试工具支持，我们该如何基于监控工.]]></description><category></category></item><item><title><![CDATA[深入理解jvm--性能监控工具]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107963102</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107963102</guid><author>achuo</author><pubDate>Wed, 12 Aug 2020 17:47:41 +0800</pubDate><description><![CDATA[1.jvm监控工具介绍

1.1.jconsole

　　JConsole是一个基于JMX的GUI工具，用于连接正在运行的JVM，不过此JVM需要使用可管理的模式启动。

1.2.启动jconsole

　　通过JDK/bin目录下的“jconsole.exe”启动Jconsole后，将自动搜索出本机运行的所有虚拟机进程，双击其中一个进程即可开始监控。

　　也可以“远程连接服务器，进行远程虚拟机的监控。

　　

　　补充：根据端口号查看进程

　　netstat -ano |findstr 8080
　]]></description><category></category></item><item><title><![CDATA[【JVM】jmap命令详解----查看JVM内存使用详情]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107793599</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107793599</guid><author>achuo</author><pubDate>Tue, 04 Aug 2020 18:01:53 +0800</pubDate><description><![CDATA[linux获取java进程PID：

https://www.cnblogs.com/sxdcgaq8080/p/10734752.html



如果命令使用过程中报错,可能解决你问题的方案：



https://www.cnblogs.com/sxdcgaq8080/p/11089179.html

https://www.cnblogs.com/sxdcgaq8080/p/10675966.html

==========================================


...]]></description><category></category></item><item><title><![CDATA[【JVM】jstat命令详解---JVM的统计监测工具]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107793361</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107793361</guid><author>achuo</author><pubDate>Tue, 04 Aug 2020 17:54:17 +0800</pubDate><description><![CDATA[1.jstat命令简介

　　jstat命令可以查看堆内存各部分的使用量，以及加载类的数量。

　　命令的格式如下：

　　　　jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]



2.使用详情列表

【以下的统计空间单位,未标明的 都是KB】



1&gt;类加载统计

命令：


jstat -class 19570

结果：



解析：


Loaded:加载class的数量
Bytes：所占用空间大小
Unloaded：未加载数量
Bytes:未加载占用空间
...]]></description><category></category></item><item><title><![CDATA[Jackson /常用注解/ annotation]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107471698</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107471698</guid><author>achuo</author><pubDate>Mon, 20 Jul 2020 19:53:39 +0800</pubDate><description><![CDATA[1、@JsonAutoDetect

自动检测，（作用在类上）来开启/禁止自动检测。

fieldVisibility:字段的可见级别 

ANY:任何级别的字段都可以自动识别 

NONE:所有字段都不可以自动识别 

NON_PRIVATE:非private修饰的字段可以自动识别 

PROTECTED_AND_PUBLIC:被protected和public修饰的字段可以被自动识别 

PUBLIC_ONLY:只有被public修饰的字段才可以被自动识别 

DEFAULT:
...]]></description><category></category></item><item><title><![CDATA[JVM 源码解读之 CMS GC 触发条件]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107366390</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107366390</guid><author>achuo</author><pubDate>Wed, 15 Jul 2020 17:27:53 +0800</pubDate><description><![CDATA[前言
经常有同学会问，为啥我的应用 Old Gen 的使用占比没达到 CMSInitiatingOccupancyFraction 参数配置的阈值，就触发了 CMS GC，表示很莫名奇妙，不知道问题出在哪？

其实 CMS GC 的触发条件非常多，不只是 CMSInitiatingOccupancyFraction 阈值触发这么简单。本文通过源码全面梳理了触发 CMS GC 的条件，尽可能的帮你了解平时遇到的奇奇怪怪的 CMS GC 问题。

先抛出一些问题，来吸引你的注意力。

为什么 Old Gen 使]]></description><category></category></item><item><title><![CDATA[理解CMS GC日志]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107366274</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107366274</guid><author>achuo</author><pubDate>Wed, 15 Jul 2020 17:23:23 +0800</pubDate><description><![CDATA[准备工作，配置输出GC日志

本文以idea的启动日志为例解读CMS收集器的GC日志
在idea64.exe.vmoptions文件中可以看到idea的启动参数，下面是初始启动参数配置




-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv.]]></description><category></category></item><item><title><![CDATA[老大难的GC原理及调优，这下全说清楚了]]></title><link>https://blog.youkuaiyun.com/achuo/article/details/107347220</link><guid>https://blog.youkuaiyun.com/achuo/article/details/107347220</guid><author>achuo</author><pubDate>Tue, 14 Jul 2020 20:48:53 +0800</pubDate><description><![CDATA[概述

本文介绍GC基础原理和理论，GC调优方法思路和方法，基于Hotspot jdk1.8，学习之后将了解如何对生产系统出现的GC问题进行排查解决

阅读时长约30分钟，内容主要如下：

GC基础原理，涉及调优目标，GC事件分类、JVM内存分配策略、GC日志分析等
	CMS原理及调优
	G1原理及调优
	GC问题排查和解决思路
GC基础原理

1 GC调优目标

大多数情况下对 Java 程序进行GC调优, 主要关注两个目标：响应速度、吞吐量


	响应速度(Responsiveness) 响应速度指程序]]></description><category></category></item></channel></rss>