摘要: 本文转载自深入理解linux系统下proc文件系统内容 导语 Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行 阅读全文
posted @ 2020-06-25 23:28 Yungyu 阅读(822) 评论(0) 推荐(0) 编辑
摘要: 本文转载自CPU飙升的问题 问题发现 事情是这样的,最近小码仔负责的项目预定今天凌晨2点上进行版本更新。前几天测试小姐姐对网站进行压力测试,观察服务的CPU、内存、load、RT、QPS等各种指标。 在压测的过程中,测试小姐姐发现我们其中一个接口,在QPS上升到400以后,CPU利用率急剧升高。 在 阅读全文
posted @ 2020-06-25 23:14 Yungyu 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 本文转载自理解系统负载 导语 top 或 uptime 等命令会输出系统的平均负载 (Load Average),一般会有三个值,分别代表 1 分钟,5 分钟和 15 分钟的平均负载。那“负载”又是什么含义呢? 一般搜索得到的结果都会有一个“桥”或是“公路”的类比,虽然形象但却不准确,其实直接阅读维 阅读全文
posted @ 2020-06-25 16:27 Yungyu 阅读(1120) 评论(0) 推荐(0) 编辑
摘要: 本文转载自CPU使用率原理及计算方式 CPU:超线程和多核 超线程(Hyper-Threading ) 超线程是Intel最早提出一项技术,最早出现在2002年的Pentium4上。单个采用超线程的CPU对于操作系统来说就像有两个逻辑CPU,为此P4处理器需要多加入一个Logical CPU Poi 阅读全文
posted @ 2020-06-25 16:05 Yungyu 阅读(2557) 评论(0) 推荐(0) 编辑
摘要: 本文转载自使用stress进行压力测试 导语 stress,顾名思义是一款压力测试工具。你可以用它来对系统CPU,内存,以及磁盘IO生成负载。 安装stress 几乎所有主流的linux发行版的软件仓库中都收录有stress,可以直接使用包管理起来安装 sudo pacman -S stress - 阅读全文
posted @ 2020-06-25 15:48 Yungyu 阅读(5199) 评论(1) 推荐(0) 编辑
摘要: 本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。 问题复现 线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多, 阅读全文
posted @ 2020-06-25 10:25 Yungyu 阅读(842) 评论(0) 推荐(0) 编辑
摘要: 本文转载自Linux零拷贝技术 导语 本文讲解 Linux 的零拷贝技术,云计算是一门很庞大的技术学科,融合了很多技术,Linux 算是比较基础的技术,所以,学好 Linux 对于云计算的学习会有比较大的帮助。 为什么需要零拷贝 传统的 Linux 系统的标准 I/O 接口(read、write)是 阅读全文
posted @ 2020-06-23 22:01 Yungyu 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 本文转载自Java线程池实现原理及其在美团业务中的实践 导语 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合 阅读全文
posted @ 2020-06-23 14:54 Yungyu 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 本文转载自深入解析String#intern 导语 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。 8种基本类型的常量池都是系统协调的,String类型的常 阅读全文
posted @ 2020-06-23 13:45 Yungyu 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 本文转载自ASM的基础用法 导语 新闻里使用的热补丁修复方案是基于AspectJ,AspectJ是AOP的一种实现。 无意接触到一种小巧轻便的Java字节码操控框架ASM,它也能方便地生成和改造Java代码。 本文主要分为几个部分: 什么是ASM; 为什么要动态生成Java类; 为什么选择ASM; 阅读全文
posted @ 2020-06-21 13:30 Yungyu 阅读(3208) 评论(0) 推荐(0) 编辑
摘要: 本文转载自Java对象内存布局 导语 首先直接抛出问题 Unsafe.getInt(obj, fieldOffset)中的fieldOffset是什么, 类似还有compareAndSwapX(obj, fieldOffset, oldValue, newValue)? 如何实现原子读, 原子写的 阅读全文
posted @ 2020-06-20 16:58 Yungyu 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 本文转载自glibc内存管理那些事儿 Linux内存空间简介 32位Linux平台下进程虚拟地址空间分布如下图: 进程虚拟地址空间分布 图中,0xC0000000开始的最高1G空间是内核地址空间,剩下3G空间是用户态空间。用户态空间从上到下依次为stack栈(向下增长)、mmap(匿名文件映射区)、 阅读全文
posted @ 2020-06-20 16:18 Yungyu 阅读(927) 评论(0) 推荐(0) 编辑
摘要: 本文转载自一次"内存泄漏"引发的血案 导语 2017年末,手Q春节红包项目期间,为保障活动期间服务正常稳定,我对性能不佳的Ark Server进行了改造和重写。重编发布一段时间后,结果发现新发布的Svr的机器内存一直在上涨。如下图示: 内存增长趋势图 观察后,第一反应是完了,一定存在内存泄漏。花了3 阅读全文
posted @ 2020-06-20 16:14 Yungyu 阅读(884) 评论(0) 推荐(0) 编辑
摘要: 本文转载自字节码增强技术-Byte Buddy 为什么需要在运行时生成代码? Java 是一个强类型语言系统,要求变量和对象都有一个确定的类型,不兼容类型赋值都会造成转换异常,通常情况下这种错误都会被编译器检查出来,如此严格的类型在大多数情况下是比较令人满意的,这对构建具有非常强可读性和稳定性的应用 阅读全文
posted @ 2020-06-20 01:02 Yungyu 阅读(4763) 评论(0) 推荐(0) 编辑
摘要: 本文转载自Byte Buddy学习笔记 简介 Byte Buddy是一个JVM的运行时代码生成器,你可以利用它创建任何类,且不像JDK动态代理那样强制实现一个接口。Byte Buddy还提供了简单的API,便于手工、通过Java Agent,或者在构建期间修改字节码。 Java反射API可以做很多和 阅读全文
posted @ 2020-06-20 00:37 Yungyu 阅读(3870) 评论(0) 推荐(1) 编辑
摘要: 本文转载自Java魔法类:Unsafe应用解析 前言 Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使 阅读全文
posted @ 2020-06-19 19:58 Yungyu 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 本文转载自JVM Attach实现原理剖析 前言 本文旨在从理论上分析JVM 在 Linux 环境下 Attach 操作的前因后果,以及 JVM 为此而设计并实现的解决方案,通过本文,我希望能够讲述清楚如下三个主要方面的内容。 Attach 为什么而出现 Attach的出现究其根本原因,应该就是为了 阅读全文
posted @ 2020-06-19 19:44 Yungyu 阅读(478) 评论(0) 推荐(1) 编辑
摘要: 本文转载自Java 动态调试技术原理及实践 导语 断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径。但断点调试会在断点位置停顿,使得整个应用停止响应。在线上停顿应用是致命的,动态调试技术给了我们创造新的调试模式的想象空间。本文将研究Java语言中的动 阅读全文
posted @ 2020-06-19 19:26 Yungyu 阅读(1681) 评论(0) 推荐(0) 编辑
摘要: 本文转载自动态代理方案性能对比 导语 因服务框架需要用动态代理生成客户端接口的stub,所以做了一下性能评测, 动态代理工具比较成熟的产品有: JDK自带的,ASM,CGLIB(基于ASM包装),JAVAASSIST, 使用的版本分别为: JDK-1.6.0_18-b07, ASM-3.3, CGL 阅读全文
posted @ 2020-06-19 15:03 Yungyu 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 本文转载自javassist 实现动态代理 导语 动态代理是指在运行时动态生成代理类。 常见的动态代理生成方式有: JDK动态代理 Apache BCEL (Byte Code Engineering Library):是Java classworking广泛使用的一种框架,它可以深入到JVM汇编语 阅读全文
posted @ 2020-06-19 14:15 Yungyu 阅读(270) 评论(0) 推荐(0) 编辑