分类 - 编程开发

2017-11-20 15:53:40    377    0    0

一、什么是火焰图?

火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,和所有其他的trace和profiling方法不同的是,Flame Graph以一个全局的视野来看待时间分布,它从底部往顶部,列出所有可能的调用栈。其他的呈现方法,一般只能列出单一的调用栈或者非层次化的时间分布。

二、perf工具介绍

1、安装

perf是linux系统自带的性能分析工具,安装很简单:

只要在LINUX系统上直接在内核文件夹下面找到tools文件夹下面的perf文件夹下面直接:

make 

make   install  即可,比如我的文件夹就是:

/usr/src/kernels/2.6.32-358.el6.x86_64/tools/perf

2、原理

性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。

3、事件

使用命令;perf  list  可以列出perf 为我们提供了哪些可以统计的事件

线面介绍几种常见的事件:

  • task-clock:目标任务真真占用处理器的时间,单位是毫秒,我们称之为任务执行时间,

    后面是任务的处理器占用率(执行时间和持续时间的比值)

    持续时间值从任务提交到任务结束的总时间(总时间在stat结束之后会打印出来)。

  • context-switches:上下文切换次数,前半部分是切换次数,后面是平均每秒发生次数(M是10的6次方)。

  • cpu-migrations:处理器迁移,linux为了位置各个处理器的负载均衡,

    会在特定的条件下将某个任务从一个处理器迁往另外一个处理器,此时便是发生了一次处理器迁移。

  • page-fault:缺页异常,linux内存管理子系统采用了分页机制,

    当应用程序请求的页面尚未建立、请求的页面不在内存中或者请求的页面虽在在内存中,

    但是尚未建立物理地址和虚拟地址的映射关系是,会触发一次缺页异常。

  • cycles:任务消耗的处理器周期数

  • instructions:任务执行期间产生的处理器指令数,IPC(instructions perf cycle)

    IPC是评价处理器与应用程序性能的重要指标。(很多指令需要多个处理周期才能执行完毕),

    IPC越大越好,说明程序充分利用了处理器的特征。

  • branches:程序

2017-09-21 15:33:30    274    0    0

对于正则表达式我们使用都在用,但是好像从来没有精通过。

最近发现一个利器,Regulex,他是JavaScript内嵌的用户生成正则表达式的图形化显示的工具,

废话不多说,借助Regulex(哦,我要把这个单词多写几遍,Regulex  regulex Regulex Regulex)

符号:* 

含义:标识在他前面的字符,子表达式,或者是括号里面的字符可以出现0次或者是多次

Regulex给出的形象化展示:

符号:+

含义:标识在他前面的字符串、子表达式、或者是括号里面的字符至少出现一次

Regulex形象化展示:

符号:[]

含义:放括号中的字符任选一个,并且必须选一个

Regulex形象化展示:

一个方括号里面是可以写多个范围的:比如[a-z1-9]

需要注意的是[a-z1-9]和[a-z][1-9]是不同的,前者是一个数,后者是两个数字

 

符号:()

含义:表达式编组,正则表达式中,编组里面的规则是先执行的,比如

[a-z1-9A-Z](1|2|3),在实际的匹配时,一定会先判断字符串的最后是不是123中的一个,然后

才会判断别的规则,同一个表达式中,编组可以有多个

Regulex形象化表示:

此外,编组中也可以再次嵌套编组

符号:{}

含义:次数规则,他表示在他前面的字符串、子表达式,或者是括号里面的字符出现次数的范围,

相对于*和+,,该规则相当于做了一个具体的范围

Regulex形象化表示:

符号:[^]

含义:该符号和[]正好是反义,表示出了方括号中的字符外的字符,至少选一个,有时使用[]指

定范围时,如果数量众多,就可以取反义,把不不可以取的字符定义好

 

 

符号:|

含义:匹配用|分开的字符,子表达式中的一个

注意和[]区分,他们两者起到的作用是一样的,区别是[]表示de是连续的范围,但是|区分元素之间

可能没有什么关系

Regulex形象化表示:

符号:.

含义:匹配任意的单个的字符,包含,字符,符号,空格

需要强调的是,匹配的是单个的字符

 

符号:^

含义:指定开始位置的字符,比如:^a表示开始的第一个字符一定是a

^[1-9]表示开始的位置必须是1-9中的任意一个

Regulex的形象化表示:

 

符号:\

含义:斜杠和一般的作用相同,有时候字符串中特殊的符号,就需要使用转义字符

 

符号:$

含义:一般放在表达式的最后,表示从字符串的末端开始匹配,比如:

[1-9]$,只要字符串的末尾是1-9就满足条件,其他的前面的都不用管,和

2017-07-28 09:38:53    211    0    0
Ctrl   
 a光标移动到首行 
 e光标移动到末行 
 u清楚所有 
 k删除当前光标到行末的所有字符 
 w删除当前光标到行首的所有字符 
 b光标前移 
 f光标后移 
 h删除当前光标前面的一个字符 
 d删除当前光标后面的一个字符 
 p显示前面一条命令 
 Tab在多个窗口之间进行切换 
 n显示后面一条命令 
Altenter全屏 
 b快速打开新的连接 
 1/2/3/4切换到1、2等窗口 
    
Ctrl+Shift +v 黏贴