认识cpu(中央处理器简称处理器)也叫CPU,Central Processing Unit线程是安排CPU执行的最小单位

四核八线程内涵:

每个单位时间内,一个CPU只能处理一个线程(操作系统:thread),以这样的单位进行,如果想要在一单位时间内处理超过一个线程是不可能的,除非是有两个CPU的实体单元。多核心技术是将多个一样的CPU放置于一个封装内(或直接将两个CPU做成一个芯片),而英特尔的HT技术是在CPU内部仅复制必要的资源、让CPU模拟成两个线程;也就是一个实体核心,两个逻辑线程,在一单位时间内处理两个线程的工作,模拟实体双核心、双线程运作

线程与进程

线程与传统的多任务操作系统进程的不同之处在于:

  • 进程通常是独立的,而线程作为进程的子集存在
  • 进程比线程承载更多的状态信息,而进程内的多个线程共享进程状态以及内存和其他资源
  • 进程具有单独的地址空间,而线程共享其地址空间
  • 进程只能通过系统提供的进程间通信机制进行交互
  • 同一进程中线程之间的上下文切换通常比进程之间的上下文切换更快。

那么我如何得知我的系统装备了多少核心的处理器?

  在 Linux 下,可以使用

  cat /proc/cpuinfo

  获取你系统上的每个处理器的信息。如果你只想得到数字,那么就使用下面的命令:

  grep 'model name' /proc/cpuinfo | wc -l

二、top

转载至linux top命令详解

在理解了load average各个值的含义后,可以用top命令来了解系统的整理状态,关注重量变量的时刻变化。为此还需了解以下这些变量。

  1.  
    下面详细介绍它的使用方法。
  2.  
    top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
  3.  
    Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
  4.  
    Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
  5.  
    Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
  6.  
    Swap: 192772k total, 0k used, 192772k free, 123988k cached
  7.  
     
  8.  
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  9.  
    1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
  10.  
    14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
  11.  
    1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
  12.  
    2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
  13.  
    3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
  14.  
     
  15.  
    统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
  16.  
    01:06:48 当前时间
  17.  
    up 1:22 系统运行时间,格式为时:分
  18.  
    1 user 当前登录用户数
  19.  
    load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
  20.  
    三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
  21.  
     
  22.  
    第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
  23.  
    Tasks: 29 total 进程总数
  24.  
    1 running 正在运行的进程数
  25.  
    28 sleeping 睡眠的进程数
  26.  
    0 stopped 停止的进程数
  27.  
    0 zombie 僵尸进程数
  28.  
    Cpu(s): 0.3% us 用户空间占用CPU百分比
  29.  
    1.0% sy 内核空间占用CPU百分比
  30.  
    0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
  31.  
    98.7% id 空闲CPU百分比
  32.  
    0.0% wa 等待输入输出的CPU时间百分比
  33.  
    0.0% hi
  34.  
    0.0% si
  35.  
     
  36.  
    最后两行为内存信息。内容如下:
  37.  
    Mem: 191272k total 物理内存总量
  38.  
    173656k used 使用的物理内存总量
  39.  
    17616k free 空闲内存总量
  40.  
    22052k buffers 用作内核缓存的内存量
  41.  
    Swap: 192772k total 交换区总量
  42.  
    0k used 使用的交换区总量
  43.  
    192772k free 空闲交换区总量
  44.  
    123988k cached 缓冲的交换区总量。
  45.  
    内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
  46.  
    该数值即为这些内容已存在于内存中的交换区的大小。
  47.  
    相应的内存再次被换出时可不必再对交换区写入。
  48.  
     
  49.  
    进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
  50.  
    列名 含义
  51.  
    PID 进程id
  52.  
    PPID 父进程id
  53.  
    RUSER Real user name
  54.  
    UID 进程所有者的用户id
  55.  
    USER 进程所有者的用户名
  56.  
    GROUP 进程所有者的组名
  57.  
    TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
  58.  
    PR 优先级
  59.  
    NI nice值。负值表示高优先级,正值表示低优先级
  60.  
    P 最后使用的CPU,仅在多CPU环境下有意义
  61.  
    %CPU 上次更新到现在的CPU时间占用百分比
  62.  
    TIME 进程使用的CPU时间总计,单位秒
  63.  
    TIME+ 进程使用的CPU时间总计,单位1/100秒
  64.  
    %MEM 进程使用的物理内存百分比
  65.  
    VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  66.  
    SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
  67.  
    RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  68.  
    CODE 可执行代码占用的物理内存大小,单位kb
  69.  
    DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
  70.  
    SHR 共享内存大小,单位kb
  71.  
    nFLT 页面错误次数
  72.  
    nDRT 最后一次写入到现在,被修改过的页面数。
  73.  
    S 进程状态。
  74.  
    D=不可中断的睡眠状态
  75.  
    R=运行
  76.  
    S=睡眠
  77.  
    T=跟踪/停止
  78.  
    Z=僵尸进程
  79.  
    COMMAND 命令名/命令行
  80.  
    WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
  81.  
    Flags 任务标志,参考 sched.h

三、调试

转载至linux load average 解析

在查看了top命令所显示的状态后,需要依据其来做优化,但top命令显示的只是表象,所以我们可以通过iostat或者vmstat命令进一步的观察。

3.1:查看系统负载vmstat

  1.  
    vmstat
  2.  
    procs -------memory-------- ----swap-- -----io---- --system-- ----cpu----
  3.  
    r b swpd free buff cache si so bi bo in cs us sy id wa
  4.  
    0 0 100152 2436 97200 289740 0 1 34 45 99 33 0 0 99 0

procs
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比

system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。

IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
3.2:查看磁盘负载iostat
每隔2秒统计一次磁盘IO信息,直到按Ctrl+C终止程序,-d 选项表示统计磁盘信息, -k 表示以每秒KB的形式显示,-t 要求打印出时间信息,2 表示每隔 2 秒输出一次。第一次输出的磁盘IO负载状况提供了关于自从系统启动以来的统计信息。随后的每一次输出则是每个间隔之间的平均IO负载状况。
# iostat -x 1 10
Linux 2.6.18-92.el5xen 02/03/2009
avg-cpu: %user %nice %system %iowait %steal %idle
1.10 0.00 4.82 39.54 0.07 54.46
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 3.50 0.40 2.50 5.60 48.00 18.48 0.00 0.97 0.97 0.28
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.10 0.30 0.20 2.40 2.40 9.60 0.00 1.60 1.60 0.08
sdf 17.40 0.50 102.00 0.20 12095.20 5.60 118.40 0.70 6.81 2.09 21.36
sdg 232.40 1.90 379.70 0.50 76451.20 19.20 201.13 4.94 13.78 2.45 93.16
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
idle小于70% IO压力就较大了,一般读取速度有较多的wait.

同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)

另外还可以参考
一般:
svctm < await (因为同时等待的请求的等待时间被重复计算了),
svctm的大小一般和磁盘性能有关:CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。
await: await的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。
如果 svctm 比较接近 await,说明I/O 几乎没有等待时间;
如果 await 远大于 svctm,说明 I/O队列太长,应用得到的响应时间变慢,
如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。

别人一个不错的例子.(I/O 系统 vs. 超市排队)
举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5个人总比20人要快吧?除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义(不过我还没发现什么事情比排队还无聊的)。
I/O 系统也和超市排队有很多类似之处:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。
下面是别人写的这个参数输出的分析
# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cciss/c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p1
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p2
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: 总IO(io)/s = r/s(读) +w/s(写) = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。
平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上 78ms,为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数-1) / 请求总数
应用到上面的例子: 平均等待时间 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 给出的78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。
每秒发出的 I/O 请求很多 (约 29 个),平均队列却不长 (只有 2 个 左右),这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。
一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里 I/O 系统无事可做,所有 29 个 I/O 请求都在142毫秒之内处理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s=78.21 * delta(io)/s = 78.21*28.57 =2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有 bug,avgqu-sz值应为 2.23,而不是 22.35。

cpu 基础知识的更多相关文章

  1. (转载)CPU基础知识

    本文转载自网络. 如有侵权,请联系处理!   简介 中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Con ...

  2. 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器

    计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...

  3. java基础知识 多线程

    package org.base.practise9; import org.junit.Test; import java.awt.event.WindowAdapter; import java. ...

  4. TCP/IP协议(一)网络基础知识

    参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...

  5. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  6. Linux基础知识整理

    一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...

  7. JAVA多线程基础知识(一)

    一. 基础知识 要了解多线程首先要知道一些必要的概念,如进程,线程等等.开发多线程的程序有利于充分的利用系统资源(CPU资源),使你的程序执行的更快,响应更及时. 1. 进程,一般是指程序或者任务的执 ...

  8. Runloop基础知识

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. JVM 基础知识

    JVM 基础知识(GC) 2013-12-10 00:16 3190人阅读 评论(1) 收藏 举报 分类: Java(49) 目录(?)[+] 几年前写过一篇关于JVM调优的文章,前段时间拿出来看了看 ...

随机推荐

  1. 一文理解JS的节流、防抖及使用场景

    函数防抖(debounce):在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时. 看一个

  2. Android手动显示和隐藏软键盘

    1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) InputMethodManager imm = (InputMethodManager) getSystemService(Contex ...

  3. CentOS7系列--5.3CentOS7中配置和管理Kubernetes

    CentOS7配置和管理Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将D ...

  4. screen 状态为Attached 连不上

    用 screen -ls, 显式当前状态为Attached, 但当前没有用户登陆些会话.screen此时正常状态应该为(Detached)  此时用screen -r ,怎么也登不上. 最后找到解决方 ...

  5. 分布式文件系统比较出名的有HDFS  和 GFS

    分布式文件系统比较出名的有HDFS  和 GFS,其中HDFS比较简单一点.本文是一篇描述非常简洁易懂的漫画形式讲解HDFS的原理.比一般PPT要通俗易懂很多.不难得的学习资料. 1.三个部分: 客户 ...

  6. 612.1.004 ALGS4 | Elementary Sorts - 基础排序算法

    sublime编辑器写代码,命令行编译 减少对ide的依赖//可以提示缺少什么依赖import 所有示例代码动手敲一遍 Graham's Scan是经典的计算几何算法 shffule 与 map-re ...

  7. Android批量打包提速 - 1分钟900个市场不是梦

    版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4152323.html 黎明前的黑暗 使用Ant或者Gradl ...

  8. sql 中的分隔符

    1.通过分隔符可以将其中的内容作为一个整体的字符串进行处理. 假设数据库中有一个表,名为user info,注意这个名字,user 和 info 中间存在一个空格. 如果直接写如下查询,会报错,可能会 ...

  9. Asp.net mvc Kendo UI Grid的使用(二)

    上一篇文章对Kendo UI做了一些简单的介绍以及基本环境,这篇文章来介绍一下Grid的使用 先上效果图: 要实现这个效果在Controller在要先导入Kendo.Mvc.UI,Kendo.Mvc. ...

  10. Oracle EBS AP银行显示不全