日历

« 2008-10-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

最新评论

统计信息

  • 访问量: 688
  • 日志数: 7
  • 建立时间: 2007-03-25
  • 更新时间: 2007-03-26

RSS订阅

我的最新日志

  • linux cpu相关性能指标

    2007-3-26

    Run Queue Statistics
    在linux中,process有两种状态:
    1.runnable
    2.blocked waiting for an event to complete
    一个blocked状态的process可能在等待一个I/O操作获取的数据,或者是一个系统调用的结果
    如 果一个process在runnable状态,这就意味着它将同其他runnable状态的process等待CPU时间,而不是立即获得CPU时间,一 个runnable状态的process不需要消耗CPU时间,只有当Linux调度进程从runnable队列中选择哪个process下次执行.当 process在runnable状态,当时等待CPU时间时,他们形成的等待队列称作Run Queue.Run Queue越大,表示等待的队列越长.
    性能工具通常显示runnable processes的数目和blocked processes的数目.还有一个很常见的系统状态是load average,系统的load是指running和runnable process的总和.例如:如果有两个processes在running和有三个在等待运行(runnable),那么系统的load为五.load average是指在指定时间内load的平均值.一般load average显示的三个数字的时间分别为1分钟,五分钟和十五分钟.

    Context Switches

    大部分现在的CPU在同一时间只能运行一个process.虽然也有一些CPU,例如超线程技术的CPU,能实现同时运行超过一个process,linux把这种CPU看作多个单线程CPU.
    linux内核不断的在不同process间切换,造成一个错觉,让人感觉一个单CPU同时处理多个任务.不同process之间的切换称作 Context Switch.当系统做Context Switch时,CPU保存所有old process的context信息并获得new process的所有context信息.Context信息包括大量的linux追踪每个process信息,尤其是一些资源:那些process正在 执行,被分配了哪些内存,它打开了那些文件,等等.切换Context会触发大量的信息移动,这是比较高的开销.如果可能的话尽量保持很小的 context switches.

    为了尽可能的减小context switches,你首先需要知道它们是怎么产生的.首先,kernel调度触发context switches.为了保证每个process平等的共享CPU时间,kernel周期性中断running的process,如果合适,kernel调 度器会开始一个其他的process而不是让当前的process继续执行,每次的周期性中断或者定时中断都可能触发context switch.每秒定时中断的次数因不同架构和不同的kernel版本而不同.获取每秒中断次数的一个简单办法是通过监控 /proc/interrupts文件,看下面的例子:
    root@localhost asm-i386]# cat /proc/interrupts | grep timer; sleep 10 ; cat /proc/interrupts | grep timer
    0: 24060043 XT-PIC timer
    0: 24070093 XT-PIC timer
    上面可以看到在指定的时间内timer次数的变化,每秒产生的中断次数为1000次.如果你的context switch比timer中断大很多.那么context switch更多的可能是I/O请求或者其他长时间的系统调用(比如sleep)产生.当一个应用请求一个操作不能立即实现时,kernel开始 context switch操作:存入请求的process并且试着切换到其他runnable process.这将使得CPU保持工作状态.

    Interrupts
    其他方面,CPU接收硬件驱动发出的中断请求.这种中断通常被触发当一个驱动器有一个时间需要被kernel操作时.例如:如果一个磁盘控制器从磁盘上取 得了一个数据块和kernel需要读取使用这个块,那么磁盘控制器会触发一个中断.kernel接收每个中断,一个中断处理器运行如果这个中断被注册,否 则,这个中断被忽略.在系统中,中断处理器的优先级非常高,而且执行速度非常快.很多时候,有些中断处理并不需要很高的处理优先级,所以也有soft- interrupt handler.如果有很多的中断,kernel需要花费大量的时间去处理中断.可以检查/proc/interrupts能够知道中断发生在哪个CPU 上.

    CPU Utilization
    CPU Utilization,一个很直观的概念,在任意时间内,CPU有7个状态:
    1.idle,表示CPU闲置并等待工作分配.
    2.user,表示CPU在运行用户的进程
    3.system,表示CPU在执行kernel工作
    4.nice,表示CPU花费在被nice改变过优先级的process上的时间(注意:被nice命令改变优先级的process仅指那些nice值为 负的process.花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内,因此整个时间加起来可能会超过百分之百)
    5.iowait,表示CPU等待IO操作完成的时间
    6.irq,表示CPU开销在响应硬中断上的时间
    7.softirq,表示CPU开销在响应软中断上的时间.
    我们一般用vmstat看到的都是四个状态:sy,us,id,wa,通过他和load avg结合,基本可以知道cpu的状态

    大部分的性能工具用百分比表示CPU时间.当system时间占用很高的时候,你可以用"oprofile"工具发现时间都花费在哪里.当iowait很高的时候,你需要分析你的IO设备,比如磁盘,网卡.

  • linux性能内存相关指标

    2007-3-26

    1.SWAP 这个指标直接反映了系统内存问题,如果很多的SWAP空间被使用,一般你的系统内存不足

    procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
    r b swpd free buff cache si so bi bo in cs us sy id wa
    2 1 131560 2320 8640 53036 1 9 107 69 1137 426 10 7 74 9
    0 1 131560 2244 8640 53076 480 0 716 0 1048 207 6 1 0 93
    1 2 132476 3424 8592 53272 832 916 1356 916 1259 692 11 4 0 85
    1 0 132476 2400 8600 53280 764 0 1040 40 1288 762 14 5 0 81

    这是一个典型的内存不足导致内存被频繁的交换到swap上,造成大量的IO操作.

    2.Cache 当系统内存比应用需要的内存多的时候,系统会把数据cache在内存中,减少费时的IO操作

    3.Buffer 当应用程序在做写磁盘操作时,系统会把要写的数据buffer起来,等到一个触发点的时候,再把buffer中的数据刷新到磁盘,减少应用程序等待IO操作的时间.

    一般你在看一个运行长时间的系统时,会发现它的可用内存很少,但是Cache和Buffer很大,这是正常情况,系统会利用你的所有自由内存来cache数据,当它需要分配内存的时候,会把cache的数据放回到disk

  • linux环境下,oracle在不同文件系统上的对比

    2007-3-26

    oracle上的一篇文章,详细描述了ext2,ext3,raw,ocfs四种文件系统的性能对比,归纳一下:

    1.linux下的文件系统下的文件读写操作使用了buffer cache,它不但cache数据,而且也有一些其他的优化算法,比如预读(read-ahead)。

    2.oracle同样也有buffer cache的实现,他有自己的大块内存(SGA)来实现自己数据的cache,这样导致数据被重复cache,加重系统的IO和内存开销。

    3.raw和ocfs不使用kernel的cache机制,避免了重复cache数据

    4.大压力情况下,由于重复的cache,导致巨大的IO

  • oracle安装在redhat下的tips

    2007-3-26

    1.当shmmax设置太小的时候,在建库的时候会出编译错误,解决办法是将shmmax设置好,然后在oracle用户下执行relink all 命令,清除temp目录内容,重新建库即可。

    2.在rhel 3/4上可以直接使用2.7G内存,不必象rhel 2上去修改载入地址。

  • mastering regular expression

    2007-3-26

    我在使用正则表达式的时候碰到的一些比较模糊的地方,整理出来提醒自己(持续更新)

    1.在BREs(Basic Regular Expression)中,"*"不代表任何字符,".*"才代表任意数目的字符,也表示零个.这个和shell有区别,在shell里,"*"即代表任 意数目的字符,在EREs(Extended Regular Expression)中的"*"和shell中无区别.

    2.egrep和awk支持扩展的元字符"+,?,|,()",grep,sed不支持

  • 在sqlplus中set autotrace on 出错的解决办法

    2007-3-26

    A:在sqlplus打开执行计划的时候出现如下问题

    SQL> set autotrace on exp
    SP2-0613: Unable to verify PLAN_TABLE format or existence
    SP2-0611: Error enabling EXPLAIN report

    Q:该错误的的主要原因是由于当前用户下没有PLAN_TABLE这张表及相应的PLUSTRACE角色权限,解决方法如下:
    $sqlplus /as sysdba
    SQL>@$?/rdbms/admin/utlxplan
    SQL>create public synonym plan_table for plan_table
    SQL>grant all on plan_table to public
    SQL>@?/sqlplus/admin/plustrce

    如果用户没有DBA权限,还需要将plustrace角色授予当前用户
    SQL>grant plustrace to public

    SQL>set autotrace on exp
    SQL>set timing on
    SQL>

    egSET AUTOTRACE ON, set timing on, alter session set time_statistics=true;

    注:set autotrace explain不会执行语句,所以不会显示statistic
       set autotrace traceonly会执行语句,但是不输出结果

  • oracle在rhel4上如何配置HugePages

    2007-3-26

    1、先配置shmmax到4000000000,这是最大内存块的大小,这样可以让sga分配在一个内存块。

    2、配置oracle用户最大线程数和最大文件句柄:
    oracle soft nofile 63536
    oracle hard nofile 63536

    3、配置HugePages Pool大小
    sysctl -w vm.nr_hugepages=1664 (3.25G/2M(Hugepagesize))

    4、配置oracle最大能锁定的内存
    oracle soft memlock 3407872
    oracle hard memlock 3407872
    注意,这个内存大小最好和hugepage pool的大小一致,否则浪费内存

    5、配置sga_max_size为3.25G,如果超过3.25G,系统不会分配在HugePages Pool中。
Open Toolbar