随笔分类 - 操作系统
摘要:本文转载自哪些原因会导致JAVA进程退出? 导语 JAVA进程消失可能有哪些原因? 那我们就开一篇文章说一下这个问题,其实很easy的,无外乎三种情况。 linux的OOM killer杀死 JVM自身故障 jvm的OOM导致进程退出(很罕见,我至今没遇见过) linux的OOM killer Li
阅读全文
摘要:本文转载自Linux系统下CPU使用(load average)梳理 导语 在平时的运维工作中,当一台服务器的性能出现问题时,通常会去看当前的CPU使用情况,尤其是看下CPU的负载情况(load average)。对一般的系统来说,根据cpu数量去判断。比如有2颗cup的机器。如果平均负载始终在1.
阅读全文
摘要:本文转载自深入理解linux系统下proc文件系统内容 导语 Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行
阅读全文
摘要:本文转载自CPU飙升的问题 问题发现 事情是这样的,最近小码仔负责的项目预定今天凌晨2点上进行版本更新。前几天测试小姐姐对网站进行压力测试,观察服务的CPU、内存、load、RT、QPS等各种指标。 在压测的过程中,测试小姐姐发现我们其中一个接口,在QPS上升到400以后,CPU利用率急剧升高。 在
阅读全文
摘要:本文转载自理解系统负载 导语 top 或 uptime 等命令会输出系统的平均负载 (Load Average),一般会有三个值,分别代表 1 分钟,5 分钟和 15 分钟的平均负载。那“负载”又是什么含义呢? 一般搜索得到的结果都会有一个“桥”或是“公路”的类比,虽然形象但却不准确,其实直接阅读维
阅读全文
摘要:本文转载自CPU使用率原理及计算方式 CPU:超线程和多核 超线程(Hyper-Threading ) 超线程是Intel最早提出一项技术,最早出现在2002年的Pentium4上。单个采用超线程的CPU对于操作系统来说就像有两个逻辑CPU,为此P4处理器需要多加入一个Logical CPU Poi
阅读全文
摘要:本文转载自使用stress进行压力测试 导语 stress,顾名思义是一款压力测试工具。你可以用它来对系统CPU,内存,以及磁盘IO生成负载。 安装stress 几乎所有主流的linux发行版的软件仓库中都收录有stress,可以直接使用包管理起来安装 sudo pacman -S stress -
阅读全文
摘要:本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。 问题复现 线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,
阅读全文
摘要:本文转载自Linux零拷贝技术 导语 本文讲解 Linux 的零拷贝技术,云计算是一门很庞大的技术学科,融合了很多技术,Linux 算是比较基础的技术,所以,学好 Linux 对于云计算的学习会有比较大的帮助。 为什么需要零拷贝 传统的 Linux 系统的标准 I/O 接口(read、write)是
阅读全文
摘要:本文转载自glibc内存管理那些事儿 Linux内存空间简介 32位Linux平台下进程虚拟地址空间分布如下图: 进程虚拟地址空间分布 图中,0xC0000000开始的最高1G空间是内核地址空间,剩下3G空间是用户态空间。用户态空间从上到下依次为stack栈(向下增长)、mmap(匿名文件映射区)、
阅读全文
摘要:本文转载自一次"内存泄漏"引发的血案 导语 2017年末,手Q春节红包项目期间,为保障活动期间服务正常稳定,我对性能不佳的Ark Server进行了改造和重写。重编发布一段时间后,结果发现新发布的Svr的机器内存一直在上涨。如下图示: 内存增长趋势图 观察后,第一反应是完了,一定存在内存泄漏。花了3
阅读全文
摘要:本文转载自C/C++子函数参数传递,堆栈帧、堆栈参数详解 导语 因为参数传递和汇编语言有很大联系,之后会出现较多x86汇编代码。 该文会先讲一下x86的堆栈参数传递过程,然后再分析C/C++子函数是怎样通过堆栈传递参数的。 注:汇编语言的过程和C/C++的子函数是一回事。 寄存器参数,存储器参数和堆
阅读全文
摘要:本文转载自epoll 原理 导语 以前经常被人问道 select、poll、epoll 的区别,基本都是靠死记硬背的,最近正好复习 linux 相关的内容,就把这一块做个笔记吧,以后也能方便查阅。 epoll 是 linux 2.6 之后新出的一种 I/O 多路复用方式,与传统的 select、po
阅读全文
摘要:本文转载自epoll原理详解及epoll反应堆模型 导语 设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻进程只需要处理这100万连接中的一小部分连接。那么,如何才能高效的处理这种场景呢?进程是否在每次询问
阅读全文
摘要:本文转载自Java NIO wakeup实现原理 导语 最近在阅读netty源码时,很好奇Java NIO中Selector的wakeup()方法是如何唤醒selector的,于是决定深扒一下wakeup机制的实现原理,相信对学习NIO是大有裨益的。 wakeup语义 众所周知,selector.s
阅读全文
摘要:本文转载自与程序员相关的CPU缓存知识 基础知识 首先,我们都知道现在的CPU多核技术,都会有几级缓存,老的CPU会有两级内存(L1和L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: 其中: L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。 L1和
阅读全文
摘要:本文转载自Java如何保证文件落盘? 导语 在之前的文章Linux/UNIX编程如何保证文件落盘中,我们聊了从应用到操作系统,我们要如何保证文件落盘,来确保掉电等故障不会导致数据丢失。JDK也封装了对应的功能,并且为我们做好了跨平台的保证。 JDK中有三种方式可以强制文件数据落盘: 调用FileDe
阅读全文
摘要:本文转载自Linux/UNIX编程如何保证文件落盘 导语 我们编写程序write数据到文件中时,其实数据不会立马写入磁盘,而是会经过层层缓存。每层缓存都有自己的刷新时机,每层缓存都刷新后才会写入磁盘。这些缓存的存在是为了加速读写操作,因为如果每次读写都对应真实磁盘操作,那么读写的效率会大大降低。带来
阅读全文
摘要:本文转载自文件 I/O 的内核缓冲 导语 从最粗略的角度理解 Linux 文件 I/O 内核缓冲(buffer cache),啰嗦且不严谨。只为了直观理解。 当我们说一个程序读写磁盘上的文件时,通常指的是把磁盘设备上的数据块存储到用户空间内存中(或把用户空间内存的数据存储到磁盘设备上)。 然而,程序
阅读全文
摘要:本文转载自零拷贝 - 用户态分析 导语 现在几乎所有人都听过 Linux 下的零拷贝技术,但我经常遇到对这个问题不能深入理解的人。所以我写了这篇文章,来深入研究这些问题。本文通过用户态程序的角度来看零拷贝,因此我有意忽略了内核级别的实现。 什么是 “零拷贝” ? 为了更好的理解这个问题,我们首先需要
阅读全文