Linux
文章平均质量分 60
库昊天
这个作者很懒,什么都没留下…
展开
-
线上问题排查思路总览
原创 2019-12-19 14:40:17 · 271 阅读 · 0 评论 -
查看进程网络流量工具nethogs
介绍 按照进程维度查看网络收发流量;安装yum -y install nethogs使用查看所有网卡流量 命令:nethogs查看指定网卡流量 命令:nethogs eth1原创 2019-12-19 13:48:51 · 282 阅读 · 0 评论 -
缓存查看利器hcache
简介 hcache是一款查看buff/cache的工具,可以查看进程的缓存占用情况,以及占用操作系统缓存最多的N的文件;安装wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcachechmod +x hcachemv hcache /usr/local/bin/使用查看使用缓存最多的3个文件$...原创 2019-12-19 09:47:15 · 12877 阅读 · 2 评论 -
Linux基础之网络包收发流程
网络包的接收流程网络数据包(Frame)到达网卡,按照FIFO顺序存入网卡的接受队列;网卡通过DMA方式将接受队列的数据拷贝到内核缓冲区sk_buffer;当数据拷贝完成后,网卡通过硬件中断(IRQ)通知CPU有新的网络数据到来,CPU执行驱动程序(NIC Driver)的处理逻辑:3.1 禁用网卡的中断。这样做的目的是避免CPU被频繁的中断,当网卡接收到新的数据时直接写内存就可以了,...原创 2019-12-16 15:19:14 · 2755 阅读 · 0 评论 -
Linux基础之文件系统
什么是文件系统? 文件系统是操作系统对存储设备上文件一种管理机制,不同的管理机制形成了不同的文件系统;文件系统划分 按IO栈的层级来分,可以分为VFS和具体文件系统两层。VFS屏蔽不同的文件系统,向上提供统一的访问接口,具体的文件系统则为具体的文件系统实现,比如ext4、overlayfs等; 按存储介质的不同,文件系统可以分为三类:基于磁盘的文件系统,常见的有Ext4、XFS、...原创 2019-12-10 20:01:58 · 210 阅读 · 0 评论 -
Linux零拷贝之sendfile/splice
sendfile/splice实现了真正意义上的零拷贝:CPU完全不需要参与数据的拷贝,应用层Java NIO为开发人员提供了FileChannel.transferFrom()/transferTo()方法使用零拷贝。sendfile传输原理用户进程通过 sendfile() 函数向内核(kernel)发起系统调用,上下文从用户态(user space)切换为内核态(kernel s...转载 2019-12-10 10:31:27 · 872 阅读 · 1 评论 -
Linux基础之文件读写流程
读文件流程进程调用库函数向内核发起读文件请求;内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项;调用该文件可用的系统调用函数read(); read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode;在inode中,通过文件内容偏移量计算出要读取的页;通过inode找到文件对应的address_space;在ad原创 2017-09-07 20:56:44 · 2505 阅读 · 0 评论 -
Linux基础之IO栈
I/O栈 Linux 存储系统的 I/O 栈,由上到下分为三个层次,分别是文件系统层、通用块层和设备层。文件系统层,包括虚拟文件系统VFS和其他各种文件系统的具体实现。VFS作用就是屏蔽不同的文件系统,为上层提供一套标准的文件访问接口;通用块层,包括块设备 I/O 队列和 I/O 调度器。Block Layer作用是屏蔽底层异构设备,向上提供统一的款设备访问接口;还可以优化调度I/O请求...原创 2019-12-02 20:13:01 · 1429 阅读 · 0 评论 -
Linux基础之Swap
Swap机制 当物理内存不足时,Linux系统会释放出部分不常用的内存,临时保存到Swap空间(磁盘空间)中, 等应用程序需要这些内存时再从Swap分区中恢复保存的数据到内存中; Swap机制只是内存回收策略的一种,内存不足时并不是只能使用swap机制;Swap大小查看free -m(静态)top(动态)sar -r -S 1(动态)内存回收机制 当物理内存不足时,L...原创 2019-11-29 19:08:05 · 599 阅读 · 0 评论 -
Linux基础之Buffer/Cache
作用: Buffer Cache和Page Cache都用来提升IO读写性能,大致原理如下:读性能: 通过预读提前加载数据,以及缓存频繁访问数据,减少I/O次数,提升读性能;写性能: 对上层的应用程序直接写入Page/Buffer即可返回,不用等待数据真正落盘;对下层的磁盘,由pdflush内核线程一次性地将多个写请求数据刷新到磁盘,减少I/O次数,提升写性能;区别 Buffe...原创 2019-11-28 19:35:14 · 293 阅读 · 0 评论 -
Linux基础之内存
物理内存和虚拟内存定义 物理内存: 物理内存条提供的的内存空间,真正存储数据的地方; 虚拟内存: 每个进程的逻辑内存,特点是独立、连续,只是逻辑上存在,并不能真正存储数据;内存映射 因为所有进程的虚拟内存加起来会远超物理内存,所以操作系统只会给进程真正使用的虚拟内存分配物理内存,通过页表维护进程的虚拟内与与物理内存之间的映射关系,每个页表都有一个单独的页表,如下图所示:虚拟内存...原创 2019-11-28 10:38:34 · 177 阅读 · 0 评论 -
Linux基础之CPU使用率
定义 CPU使用率是指某个任务(进程/线程/中断程序)在一定时间内占用CPU的时间比例;查看CPU使用率CPU维度 mpstat命令:查看所有或某个CPU使用率;(第一行的all表示所有CPU的平均使用率)[root@stress ~]# mpstat -P ALLLinux 3.10.0-514.16.1.el7.x86_64 (stress) 11/22/2019 _x86...原创 2019-11-22 19:30:49 · 357 阅读 · 0 评论 -
进程资源查看pidstat
作用 查看全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。使用指定采样周期和次数命令格式:pidstat [option] interval [count]pidstat 3 10...原创 2019-11-22 11:42:56 · 205 阅读 · 0 评论 -
Linux之iostat命令详解
功能 查看磁盘IO情况,只能查看系统整体的IO消耗,无法查看每个进程的IO消耗(iotop命令);语法 iostat [选项][参数]常用选项:-k:显示状态以千字节每秒为单位,而不使用块每秒; -m:显示状态以兆字节每秒为单位;-d:显示扩展参数;参数:间隔时间:每次报告的间隔时间(秒);次数:显示报告的次数;IO详情 rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会原创 2017-10-25 10:00:29 · 525 阅读 · 0 评论 -
Linux基础之磁盘IO
转载:https://tech.meituan.com/about-desk-io.html顺序读写 VS 随机读写机械硬盘的连续读写性能很好,但随机读写性能很差,原因有两点:随机读写时,磁头需要不停的移动,时间都浪费在了磁头寻址上;顺序读可以充分利用文件系统的预读特性,直接从Page Cache内存读取数据,不用进入磁盘;磁盘性能指标IOPS 每秒能够处理的I...原创 2018-05-18 14:23:17 · 1502 阅读 · 0 评论 -
Epoll详解
工作原理1. 创建红黑树调用epoll_create()创建一颗空的红黑树,用于存放FD及其感兴趣事件;2. 注册感兴趣事件调用epoll_ctl()向红黑树中添加节点(FD及其感兴趣事件),时间复杂度O(logN);向内核的中断处理程序注册一个回调函数,告诉内核,如果这个句柄的中断到了,就把它添加到就绪队列中。 所以,当一个socket上有数据到了,内核在把网卡上...转载 2018-05-22 11:33:09 · 891 阅读 · 0 评论 -
Select、Poll与Epoll 的比较
系统调用 select poll epoll 获取就绪FD的时间复杂度 O(n) O(n) O(1) 获取就绪FD的方式 采用轮询方式检测就绪事件 采用轮询方式检测就绪事件 采用轮询方式检测就绪事件 最大支持文件描述符数 1024(x86) or 2048(x64) 无上限 无上限 FD拷贝 每次sel...原创 2018-05-22 14:07:20 · 243 阅读 · 0 评论 -
机械硬盘和固态硬盘
机械硬盘HDD VS 固态硬盘SSD 总结: SSD具有速度快、功耗低等优点,但是成本高,容量受限;HDD具有成本低、容量大等优点,但是速度慢、功耗大,各项具体比较如下图所示: 固态硬盘SSD 固态硬盘没有机械装置,数据存储在可持久记忆的硅晶体上,因此可以像内存一样快速随机访问。但同时,很多针对机械硬盘的优化算法换成SSD将会失效。参考:https://www....原创 2018-08-20 15:33:01 · 1286 阅读 · 0 评论 -
磁盘空间占满问题排查
排查步骤Step1: 查看磁盘使用情况及挂载目录 通过df命令查看各磁盘使用情况,以及其挂载的目录;df -hStep2: 查看目录下子目录及文件大小 通过du命令确定当前挂载目录下的各个子目录及文件大小,并且对其大小进行排序;du -h --max-depth=1 | sort -hStep3: 重复上一步不断缩小范围直至确定目录及文件参考:http://www....原创 2019-03-19 18:17:43 · 520 阅读 · 0 评论 -
Linux版本查看
命令及解析 使用命令cat /proc/version来查看Linux版本信息,输出信息如下:Linux version 2.6.18-92.el5 (brewbuilder@ls20-bc2-13.build.redhat.com) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-41)) #1 SMP Tue Apr 29 13:16:15 EDT ...翻译 2019-05-27 19:49:53 · 296 阅读 · 0 评论 -
文件系统
文件组成 每个文件由两部分组成:文件元信息和文件数据。文件元信息包含文件大小、权限、时间戳以及文件数据的位置,使用inode表示,称作“索引节点”;文件数据存储在磁盘块上;inode使用情况查看df -i进程与文件系统已打开文件系统中的每个进程都维护了自己打开的所有文件,通过lsof命令查看:lsof -p PID可打开文件数上限ulimi...原创 2018-05-17 20:49:25 · 143 阅读 · 0 评论 -
tcpdump命令
功能:网络抓包工具; 使用方式:tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ] [ -C file_size ] [ -F file ] [ -i interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s s原创 2018-04-26 15:54:54 · 216 阅读 · 0 评论 -
硬盘基本知识
转载:https://www.jianshu.com/p/9aa66f634ed6硬盘组成一个硬盘由多个盘片组成;每个盘片分为两个盘面,每个盘面对应一个读写磁头;每个盘面由多个磁道组成;每个磁道由多个扇区组成;硬盘容量计算 硬盘容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数;磁盘耗时磁头寻道时间。磁头从开始移动到数据所在...转载 2018-04-10 10:42:30 · 793 阅读 · 0 评论 -
网络IO模型
Linux的IO模型中,应用从网络读取数据时,会经历两个步骤:等待网络数据到达,然后DMA拷贝到内核缓冲区;数据从内核缓冲区拷贝到应用缓冲区;针对这两个阶段,Linux提供了5种网络IO模型:阻塞IO模型;非阻塞IO模型;IO复用模型;信号驱动IO模型;异步IO模型;阻塞IO模型 应用进行系统调用,阻塞等待直至数据到达被拷贝到用户缓冲区,或者发生错误,如下图所示: 缺点:一原创 2017-12-08 16:31:29 · 235 阅读 · 0 评论 -
心跳机制详解
什么是心跳机制? 发送方按照一定规则(周期性发送、空闲发送等等)向接收方发送固定格式的消息,接受方收到消息后回复一个固定格式的消息,如果长时间没有收到,比如心跳周期的3倍,则认为当前连接失效,将其断开。 注:发送方可以是客户端或者服务端,根据实际情况而定,常见是客户端作为发送方。应用场景 判断长连接是否存活:当长连接没有流量时,无法判断是通信异常引起还是通信正常没有业务流量引起,通过发送心跳包原创 2017-11-06 18:44:53 · 5977 阅读 · 0 评论 -
CPU使用率 VS Load
定义CPU使用率:一段时间内,CPU执行任务的时间与总时间的比率,从时间维度反映CPU资源使用情况; Load:一段时间内,CPU正在执行的任务以及处于“uninterruptable sleep”状态(IO阻塞导致)任务数量的平均值; The load average is calculated as the average number of runnable or running tas原创 2017-10-24 20:55:03 · 360 阅读 · 0 评论 -
Linux之OOM-killer
查看哪个进程被杀死: grep -i ‘killed process’ /var/log/messages 或者 dmesg | grep -i ‘killed process’ dmesg vs /var/log/messages 两者都是用于记录系统消息的,dmesg是内存缓存的消息,超过大小会丢弃,所以要及时查看;messages里是syslog-ng写进去的,写的内容依赖于其配置/e原创 2017-10-16 10:44:18 · 3663 阅读 · 0 评论 -
Linux之常用基础命令
pmap功能:查看进程内存的映射关系 常用:pmap -x pidlsof功能:查看系统打开的文件列表 常用:lsof filename 显示打开指定文件的所有进程 lsof -p pid 显示指定进程打开的文件列表 注意:因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。原创 2017-09-07 11:31:42 · 241 阅读 · 0 评论 -
Linux之top命令详解
CPU各项含义 cpu_st:虚拟cpu等待实际cpu时间占比; cpu_si:软中断占用CPU的百分比; cpu_hi:硬中断占用CPU的百分比 ; cpu_wa:等待输入输出的CPU时间百分比; cpu_id:空闲CPU百分比; cpu_ni:用户进程空间内改变过优先级的进程占用CPU百分比 ; cpu_sy:内核空间占用CPU百分比; cpu_us原创 2017-10-24 15:37:40 · 287 阅读 · 0 评论 -
Linux零拷贝之mmap
mmap概念 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。 特点:实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从原创 2017-09-08 09:52:28 · 2794 阅读 · 1 评论 -
Java NIO之SelectorProvider
Selector工厂方法SelectorProvider创建规则如下图所示: 1. 首先尝试加载系统属性java.nio.channels.spi.SelectorProvider指定的实现类,并实例化,如下图所示: 2. 其次使用SPI机制进行服务发现,如下图所示: 3. 最后使用JDK默认实现DefaultSelectorProvider;DefaultSelecto原创 2017-12-11 11:23:40 · 1250 阅读 · 0 评论 -
理解CPU Cache
转载:http://www.ideabuffer.cn/2017/05/07/%E7%90%86%E8%A7%A3CPU-Cache/CPU Cache介绍 随着CPU频率的不断提升,内存的访问速度却并没有什么突破。所以,为了弥补内存访问速度慢的硬伤,便出现了CPU缓存。它的工作原理如下:当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的转载 2018-03-21 19:26:38 · 696 阅读 · 0 评论 -
Linux基础之网卡
基础命令查看网卡型号: lspci | grep -i ether; 查看网卡资源使用情况: sar -n DEV(重点看网络带宽); 查看网卡eth0的队列:/sys/class/net/eth0/queues; 查看网卡是否支持多队列: lspci -vvv | grep -i msi-x; 如下图所示,查看Ethernet controller的条目内容,如果有MSI-X &原创 2018-01-29 15:05:21 · 627 阅读 · 0 评论 -
Linux基础之系统负载Load
Load定义 日常查看负载的命令如top、updatime等都是从/proc/loadavg获得,其对load的定义如下: The first three fields in this file are load average figures giving the number of jobs in the run queue (state R) or waiting for disk原创 2018-01-20 18:44:09 · 444 阅读 · 0 评论 -
在Linux下判断系统当前是否开启了超线程
转载:http://www.lenky.info/archives/2012/03/1343在判断当前是否开启了超线程之前,需要先判断另外几个数据: 数据1:物理CPU个数:cat /proc/cpuinfo | grep "physical id" | sort | uniq 数据2:每个物理CPU的逻辑核数:cat /proc/cpuinfo | grep "cores" | uniq数据3:转载 2018-01-30 17:38:55 · 253 阅读 · 0 评论 -
Linux基础之中断
中断概念 中断是指CPU在执行过程中,出现了某些优先级更高的事件需要处理,暂停当前正在执行的程序,转去处理突发事件,处理完之后返回原程序位置继续执行,如下图所示。这些紧急事件一般指各种硬件设备,如磁盘、网卡、键盘和串口等。 中断的实现基于APIC芯片:硬件设备向IO APIC(总控中断控制器)发送信号,由IO APIC分发请求给各CPU处理。 基于MSI/MSI-X机原创 2018-01-29 21:09:45 · 621 阅读 · 0 评论 -
select/poll详解
基本介绍 select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作。但select(),poll(),epoll()本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I原创 2017-12-11 10:15:17 · 332 阅读 · 0 评论 -
Linux基础之内核态与用户态
Linux体系架构 内核作用:向下控制硬件资源;向内管理操作系统资源:包括进程的调度和管理、内存的管理、文件系统的管理、设备驱动程序的管理以及网络资源的管理;内核态和用户态: 由于计算机系统的各种硬件资源是有限的,为了保证每一个进程都能安全的执行,处理器设置了两种模式:“用户态”与“内核态”。应用程序默认运行在用户态下,当应用程序需要执行一些容易发生安全问题的操作时,需要转换为内核态执原创 2017-09-07 20:17:13 · 295 阅读 · 0 评论