atop是一款开源的性能监测工具,atop是以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中
在管理Linux系统时,了解系统级监控工具是至关重要的。其中,atop是一种功能强大的工具,它允许运维人员以实时的方式监控系统运行状态,包括进程活动、内存使用、磁盘I/O以及网络负载等。atop提供了一种简洁而全面的方式来追踪系统表现和资源消耗情况,使得性能分析变得简单而直观。
atop就是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统CPU、内存、磁盘、网络的资源使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,可获取相应的atop日志文件进行分析。
atop用来监控系统资源与进程的工具,默认是以10s为间隔,来记录系统的运行状态,并且会以每隔10分钟记录一次采集数据到日志中。
前言 Linux上运行大量的后端的业务程序,往往希望得到更快的响应速度,更小的延迟,甚至有严格的PCT 99的指标。而操作系统的复杂度很高,多个因子之间可能会互相影响,从而影响到业务的指标。 在作者的工作环境中,经常使用到atop工具进行问题分析。atop是一个小巧的、高性能、比较全面的系统/进程级别的监控软件,下面就来介绍一下它的主要功能。 分析 源代码 源代码目前主要维护在github上面,https://github.com/Atoptool/atop 代码的原作者也是现在的maintainer通常会在几周甚至个把月的时间处理一下Pull Request,如果有新的改动需要合入到upstream,还是需要一点耐心的。 基本原理介绍 在源代码中的atop.c中有如下描述:
[非内部程序,需要安装]它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析。atop是一款开源软件,我们可以从这里获得其源码和rpm安装包。
前言 互联网公司一般都会运行着几千到几万的服务器。一般的监控会采用类似ganglia/falcon类似的工具,在本地启动一个agent,把数据统计上报到集中式的服务器中,用来监控和分析系统的问题。 另外,有atop这样的工具,可以运行在服务器上,在本地写下record文件,atop命令本身也可以分析record文件,其中保存的数据的粒度更加细致,可以精确到线程级别,还有IPC,主频等等。 经验来看,atop每天生成的record文件大约500M左右,保存最近的一段时间,似乎也不是问题。用集中式的监控,配合上atop,对于问题分析来说,会有一些帮助。 分析 1,atop的改进 atop的代码量本身并不大,官方的代码在: https://github.com/Atoptool/atop.git 在使用atop的过程中,遇到了一些问题,作者也做了相应的修改: https://github.com/bytedance/atop 在bytedance-features分支上。作者把patch发送给maintainer,但是maintainer一直没有回复。在这里,列举一下改动的内容,如下。 2,smaps的优化 尝试使用smaps_rollup代替smaps,用来提高atop收集进程的PSS内存使用的效率。这个patch会在4.14上有所提升。一般情况下,建议在atop收集的时候不要加上-R选项。因为在atop读/proc/PID/smaps的时候,会walk整个PID进程的页表,期间会lock住内存页表的锁。如果在这期间PID进程发生了page fault,也需要lock,就会造成锁的进程。影响PID进程的性能。 3,数据破损问题 atop使用裸数据的方式保存record文件,其中包括三部分:raw record,就是头信息; scompbuf,是系统状态信息的数据; pcompbuf,是task级的状态信息数据,大小和task数量有关系。为了减小record文件的大小,对于 scompbuf和pcompbuf还采用了压缩。所以,数据必须完整的 rr,scompbuf,pcompbuf顺序写下去的,否则atop无法识别数据。 good case : ... rr,scompbuf,pcompbuf ... rr,scompbuf,pcompbuf ... bad case : ... rr,scompbuf[missing] ... rr,scompbuf,pcompbuf … 例如上面的例子,在写完rr,scompbuf之后,atop发生了crash,再重新启动,就会丢失后面的 pcompbuf,造成了整个record文件的不可用。 在patch中,作者使用writev进行写入数据,要么都写入成功,要么都写入不成功,用来防止这种case发生。 4,IPC造成的虚拟机性能抖动 IPC,instructions per cycle。可以用来衡量CPU运行的效率。通常是通过perf采集的数据。 提到perf,就要说明一下它的工作原理:intel的CPU上集成了PMU,用来采集硬件的信息。可以收集的硬件信息很多,可以通过perf list | grep Hardware来看。但是硬件的寄存器有数量限制,所以需要通过wrmsr指令告诉CPU收集哪些具体的事件,再通过rdpmc指令来读取对应的数据。 在虚拟化场景下,在虚拟机中使用PMU又复杂了一下,在虚拟机中执行wrmsr和rdpmc的时候,都需要虚拟机从none-root模式退出,影响了虚拟机的性能。 在patch中,作者让atop支持perfevents的配置,支持三种模式:enable模式,启用perf收集IPC。disable模式,禁用perf收集IPC。auto模式,在启动的时候,atop自动检查是否在虚拟机中运行,如果在虚拟机中,禁用;在物理级中,启用。默认是auto模式。 5,减小record文件 如果是大规格的服务器,40CPU,甚至到96CPU,通常运行大量的docker,里面运行了很多的task。其中很多task占用资源很少,但是依然会占用atop的record文件。 在patch中,支持了配置参数recordcputop & recordmemtop。用来配置收集cpu和内存的topN。其他的task可以忽略。作者测试线上的服务器36CPU, about 500 processes的场景,大约节省了40%的磁盘空间。 6,加速读record 一般在ganglia上看到系统抖动,例如下午三点十分,在对应的服务器上执行: atop -r / var/log/atop/atop_xxxx -b 15:10 如前文所述,因为rawrecord的原因,则会从头读到尾,直到匹配到对应的时间。对于log盘的使用,尤其是虚拟化场景,会限制IOPS。这
atop是一个功能非常强大的linux服务器监控工具,它的数据采集主要包括:CPU、内存、磁盘、网络、进程等,并且内容非常的详细,特别是当那一部分存在压力它会以特殊的颜色进行展示,如果颜色是红色那么说明已经非常严重了。
平常处理服务器的问题遇到的最多的是负载高了,内存高了,io高了等问题,这里最明显的表现就是相关的监控指标了,对于诊断这种问题起到事半功倍的效果。
atop 命令是一款监控 Linux 系统资源与进程的工具,非内部命令,需要安装。
操作系统内部本身是非常复杂,存在各种调用关系,本文主要讲解利用 atop+perf 双剑客来加速排障和分析一些常见的负载问题
前言 在虚拟化场景下,经常会用到steal time来判断虚拟机的vCPU执行是否被抢占,进而来衡量虚拟机的性能指标。同时,在延迟敏感型的业务上(例如redis),会用sched delay来分析延迟突刺类问题。 这里我们来分析steal time以及进程的sched delay的原理和实现。再进一步延伸到atop对sched delay的支持,做到带外监控。 分析 schedstat中的run delay 在进程的proc目录下,存在文件/proc/<PID>/schedstat 在内核文档中可以找到下面的描述
在centos操作系统中查看所有正在运行的进程,你可以使用ps命令。它能显示当前运行中进程的相关信息,包括进程的PID。Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息。ps命令能提供一份当前进程的快照。如果你想状态可以自动刷新,可以使用top命令。
你可以使用ps命令。它能显示当前运行中进程的相关信息,包括进程的PID。Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息。ps命令能提供一份当前进程的快照。如果你想状态可以自动刷新,可以使用top命令。
可以使用ps命令。它能显示当前运行中进程的相关信息,包括进程的PID。Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息。
本文实例为大家分享了Android仿刮刮卡效果展示的具体代码,供大家参考,具体内容如下
前言 在高性能网络模型下,使用polling模式,依然遇到了长尾20ms+的情况,远高于平均的1ms左右。怀疑是调度的延迟导致的。那么如何量化是不是内核的调度导致的呢?以及如何发现是什么原因导致的呢? 分析 调度延迟 在前文《[Linux][kernel]sched delay和steal time的原理分析以及atop的监控改进》中分析过Linux中如何计算一个task的run delay:即一个task希望运行,但是得不到运行的时间统计,即run delay,也就是调度延迟。 那么问题来了,如果通过atop监控到某一个进程的run delay是2%,能说明那20ms的长尾延迟是因为调度延迟导致的吗?答案是不能。我们看下面的两种情况: 1,例如说,Run 19ms, Delay 1ms,Run 19ms, Delay 1ms,Run 19ms, Delay 1ms。在这个模型下,统计出来的run delay是2%。 2,另外一种模型下,例如 Run 980ms, Delay 20ms, Run 980ms, Delay 20ms,这个模型下,就会遇到20ms+的长尾延迟。 所以atop可以统计出来宏观的run delay延迟占比,但是不能统计出来具体的调度延迟极端情况。 runqslower工具 在bcc中提供了runqslower工具,可以通过参数控制,打印出来哪些进程的调度延迟超过了特定的阈值,例如希望知道哪些进程的run delay超过10ms,可以使用这样的命令:
在企业应用中,除了经常会用到企业级的性能监控和告警工具(如nagios、zabbix、Prometheus),还会在服务器设备出现性能问题时,可以通过部署一些可以进行性能回溯和追踪的性能分析工具,便于在主机hang死或挂机时,定位主机各项指标是否过载,也可以定位到具体是哪些程序引发了性能瓶颈。
Xfermode的作用是将绘制的图形的像素和Canvas上对应位置的像素按照一定的规则进行混合,形成新的像素,再更新到Canvas中形成最终的图形,使用的时候都是通过Paint.setXfermode 我们一个像素的颜色都是由四个分量组成,即ARGB,A表示的是我们Alpha值,RGB表示的是颜色 S表示的是原像素,原像素的值表示[Sa,Sc] Sa表示的就是源像素的Alpha值,Sc表示源像素的颜色值 D表示的是目标像素,目标像素的值表示[Da,Dc] Da表示的就是目标像素的Alpha值,Dc表示目标像
作者遇到了业务的一个性能抖动问题,在这里介绍一下它的原因和解决办法。 分析 1,page fault 在Linux上,进程分配到的内存是虚拟内存,经过内核的页表管理,会把虚拟内存映射成物理内存。 a,在第一次访问内存的时候,会触发page fault,内核会给进程分配好内存,进程继续执行。 b,内核进行内存回收,可能会把进程的部分内存进行回收,swap到磁盘上,下次访问到再换回来。当然,这个在实际业务上未必会启用swap以防止性能下降。 c,进程自己判断,认为部分内存段时间内不会使用,会尝试把它归还给内核。它的好处是不需要修改进程的虚拟地址空间,只是把内存页面(page)归还给内核,下一次访问到的时候,会因为page fault而重新分配物理内存。 另外需要注意的时候,处理page fault的过程中,需要持有进程的内存的锁(current->mm->mmap_sem)。 2,TLB shootdown 例如某服务器有40CPU,那么就意味着可以同时运行40个task。 例如某业务有30个线程,且这30个线程都很忙,并行执行在30个CPU上。 因为30个线程共享地址空间,它们使用的是相同的页表(page table)。所以在运行这30个线程的CPU上,会加载相同的页表。 当代CPU为了加速TLB查找的速度,会使用cache,也就是说会把对应的页表项(page table entry)加载到TLB cache中。 在运行的某一个时刻,某1个线程执行了上述的page fault的case 3,也就是执行了系统调用int madvise(void *addr, size_t length, MADV_DONTNEED),想要释放1个page(4K大小),除了需要修改页表释放该page外,还需要确保CPU的TLB cache中也是没有该page的PTE的。因为如果TLB cache还有该PTE,那么CPU访问这个page就不会出错,而这个page已经被释放并分配给其他进程使用的话,就会造成安全问题。 在多核场景下,这个问题就变得更加复杂了。除了运行madvise的线程之后,还需要确保另外的29个线程运行的CPU的TLB cache也是没有该PTE的。为了实现这种效果,需要当前的CPU通知另外的29个CPU,执行clflush或者重新加载cr3。这个通知的过程需要发送IPI(inter processor interrup)。 发送IPI的这个过程,在x86上的体现就是需要CPU执行wrmsr指令,对应的操作是触发ICR。了解虚拟化的朋友应该知道,wrmsr这条指令在虚拟机上需要经过Hypervisor处理,性能更低一些。 除此之外,在执行madvise的过程中,还需要持有当前进程的内存的锁(current->mm->mmap_sem),而且这个锁的粒度比较大。 而jemalloc库,默认情况下,则会释放过期的内存,调用madvise(void *addr, size_t length, MADV_DONTNEED)。 3,smaps/smaps_rollup cat /proc/PID/smaps,可以查看进程的每一段VMA信息。
当涉及到centos系统性能优化的时候,物理内存是一个最重要的因素。自然的,Linux提供了丰富的选择来监测珍贵的内存资源的使用情况。不同的工具,在监测粒度(例如:全系统范围,每个进程,每个用户),接口方式(例如:图形用户界面,命令行,ncurses)或者运行模式(交互模式,批量处理模式)上都不尽相同。
当涉及到Linux系统性能优化的时候,物理内存是一个最重要的因素。自然的,Linux提供了丰富的选择来监测珍贵的内存资源的使用情况。不同的工具,在监测粒度(例如:全系统范围,每个进程,每个用户),接口方式(例如:图形用户界面,命令行,ncurses)或者运行模式(交互模式,批量处理模式)上都不尽相同。
在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况。下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法。
本文介绍了HT for Web基于HTML5的图像操作实现,包括基于Canvas的globalCompositeOperation属性进行各种blending效果,以及基于WebGL的Shading Language的像素操作方式。通过两种截然不同的绘制方式,达到了高效的性能,并节省了CPU资源。同时,HT for Web还提供了丰富的交互和动画等操作,具有广泛的应用场景。
/** * 图形组合 */ function initDemo5() { var canvas = document.getElementById("demo5"); if (!canvas) return; var context = canvas.getContext("2d"); var oprtns = [ "source-atop", // 新图形覆盖原有图形,新图形未重叠部分透明 "source-in", // 新图形覆盖原有图
上篇介绍了HT for Web采用HTML5 Canvas的getImageData和setImageData函数,通过颜色乘积实现的染色效果,本文将再次介绍另一种更为高效的实现方式,当然要实现的功能
我记得之前分享过一篇文章 ggplot2绘图添加文本注释上下标问题,ggplot2画图如果添加文本注释可以用annotate()这个函数。简单的小例子 library(extrafont) fonts() ggplot(df,aes(x=A,y=B,color=D))+ geom_point(aes(shape=D),size=10)+ theme_bw()+ theme(legend.position = "none")+ annotate(geom = "text",x=3,y=8.5,
PorterDuff的由来: PorterDuff其实来自两个人名:Tomas Porter和Tom Duff ,他们是最早在SIGGRAPH上提出图形混合概念的大神级人物.有感兴趣的同学可以自己查下并深入了解,在此不再做过多描述. 利用ProterBuff.Mode我们可以完成任意2D图像测操作, 比如涂鸦画板应用中的橡皮擦效果,绘制各种自定义的进度,等等很强大的效果,下面请看效果:
区域 ( 源图像素 不透明区域 ) : 该区域的 透明度 与 颜色值 与 源图像一样 ;
https://github.com/orgs/gradlab/repositories
上一篇文章中给大家介绍了《11 款可替代 top 命令的工具!》,今天我再来给大家推荐 7 款可替代 top 命令的工具,看完这两篇替代品的文章相信能让你对 Linux 操作系统下一个小小的命令大开眼界。
Tags: LaTex MathJax ---- 简书Markdown暂时不能直接支持使用$$标签来显示Latex语法,可以在 https://www.zybuluo.com/hzw/note/80162 (作业部落 Markdown)查看使用"$$"标签显示Latex公式效果,其直接支持MathJax,脚注,目录,Tags等语法。 注:简书要想显示数学公式,可以按如下操作,使用Latex在线生成然后插入的方式。 编辑源码 对于简易公式,可以使用如下方式一: ![](http://latex.cod
原文 https://mp.weixin.qq.com/s/8A_y1dlZrUvpaJfbQrVK3w
Xfermode有三个实现类:AvoidXfermode, PixelXorXfermode以及PorterDuffXfermode。 前两个类因为不支持硬件加速在API level 16被标记为Deprecated了,用也可以,但是需要关闭硬件加速,简单说下。
你可以定义成你项目的logo图片,可以设置水波颜色、波长、波宽、字体大小、颜色、进度条的最大值,当前进度值,还可以设置波纹震动的快慢。当设置一个进度不变的时候,打开时还有一个动画填满的效果(比如第二个流量显示,这里图片没有截出这个效果)。
clip()方法从原始画布中剪切任意形状和尺寸。 提示:一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)。您也可以在使用 clip() 方法前通过使用 save() 方法对当前画布区域进行保存,并在以后的任意时间对其进行恢复(通过 restore() 方法) 以下是用一个圆去截取一个矩形的示例:
https://www.psvmc.cn/zjtools/z/tex-editor/index.html
前言 为了提高虚拟机的网盘的高科用,同时挂载了两块,在Guest内部使用RAID1,如果后端一块发生故障,可以保证在10s内failover,恢复业务运行。当前的配置是把RAID1的md设备格式化成ext4文件系统,挂载后使用。 atop每天大约生成了200M+的文件,文件在md设备上。发现在查看atop文件的时候,耗时很长,大约估计需要30s。 分析 1,使用filemap分析文件的物理分布 首先怀疑是ext4的文件在物理分布上的情况,有可能是比较零碎,会导致读消耗更高的IOPS。 作者写过一个工具,用来dump出来文件的物理layout情况,代码路径: https://github.com/pacepi/tool/blob/master/filemap.c 编译后执行,
KVM forum 2019上,作者和同事的演讲主题是《How KVM-based Hybrid Deployment Powers Bytedance’s Biggest Day Ever》。 在这里详细展开一下,介绍一下基于KVM虚拟化的混合部署。下文的脉络大约是: 1,业务背景 2,为什么使用KVM虚拟化方案 3,在使用KVM虚拟化方案的过程中,我们做了那些改进 4,基于KVM虚拟化的混合部署方案取得了怎样的效果
本文实例为大家分享了Android实现光点模糊渐变的自旋转圆环效果,供大家参考,具体内容如下
在本文中,你将学习到 Canvas 提供的一些更高级的功能。本文将讲述如何合成、创建阴影使图形看起来更真实有趣。本文内容非常精彩,我希望这些内容能够拓宽你的眼界,帮助你学会画布的高级功能。
https://stackoverflow.com/questions/7182247/ggplot2-annotate-text-with-superscript
PorterDuff的由来: 相信大多数人看到这个ProterDuff单词很奇怪了吧,这肿么个意思呢,然后就用有道啊,金山啊开始翻译,但是翻译软件给出的结果肯定还是 ProterDuff或者”未找到”. 这是什么情况呢?PorterDuff其实来自两个人名:Tomas Porter和Tom Duff ,他们是最早在SIGGRAPH上提出图形混合概念的大神级人物.有感兴趣的同学可以自己查下并深入了解,在此不再做过多描述. 利用ProterBuff.Mode我们可以完成任意2D图像测操作, 比如涂鸦画板应用中的橡皮擦效果,绘制各种自定义的进度,等等很强大的效果,下面请看效果:
客户上云过程中将原有在数据中心自建kubernetes集群迁移至腾讯云TKE集群,迁移过程中发现其中有一个容器沙箱环境频繁出现node节点夯死现象,目前已经出现5-6次,亟需定位原因。出现异常时节点无法登陆且需要手动重启才能恢复,"罪犯"逃离,异常后节点状态置为NotReady,无状态化pods会自动驱逐至其他节点,有状态化StatefullSets部署的pods无法驱逐成功。
对于上面的命令,有些是Linux系统自带的,你可以直接执行。有些是第三方命令,不过绝大多数可以直接通过Yum install xxx或者apt-get intall xxx来安装。这些命令虽然小巧,但是在我们的服务器出现问题将会显得特别有用。
1.free:查看内存占用情况,会直接返回,常用参数 -M、-G 是以MB或GB为单位返回结果。
因为时间比较紧张,8 天的时间完成环信客服模块的接入,就直接用了环信提供的 UI 控件,但是一些细节的部分, UI 还是会给出设计图,按照设计图完成最终效果。
在详情页面我是用 WebView 展示的,我想实现的交互是,点击 WebView 的内容跳转另一个页面。实现过程是,让 HTML 代码调用 JavaScript 代码,再让 JavaScript 代码调用 Android 的代码,下面看看如何实现。
领取专属 10元无门槛券
手把手带您无忧上云