Linux服务器性能优化最佳实践

所需积分/C币:29 2018-04-24 10:13:04 1.11MB PDF

调优需要掌握的技能: 1. 必须了解硬件和软件 2. 能够把所有的性能、指标量化,用数字说话 3. 设置一个正常期待值,比如将响应速度调到1.5秒 (企业版操作系统在出厂时已经调优,适用于普遍的应用,再根据个人的环境进行微调) 4. 建议有一定的开发能力 5. 如果想要更好的调优,让调优有艺术性,需要更多的经验的积累,从而有一定洞察力,调节时所给参数才最恰当
资源由www.eimhe.com美河学习在线收集提供 号1gcpu Architecture x8664 CPU oP-mode (a): 32-bi七,64-bit Byte Order: Lit七1 c Endian CPU(B): 40 On-line CPU(s) list: 0-39 Thread【a) Per cote: Core(=) per socket: 10 socket【a): NUMA node(=): Vendor ID: Genuineintel ceU family: 6 Model Model name Intel(R xeon(R) CPU E7- 4870 22.40GHz stepp⊥ng: CPU HE: 2394.204 BOgoMIPS: 477.85 V⊥工七ua11z且t⊥an: Lld cache 32置 Lli cache 32K I 2 cache: 256K ,3 cache: 30720R NUMA node0cPu《a): 0,4,8,12,16,20,24,28,32,36 NUMA nadel CPU(s): 2,6,10,14,1B,22,26,30,34,38 NIM mode2cpu《a): 1,5,9,13,1721,25:2933,37 NUMA mode3 CPU(a): 3,7,11,15,19,23,27,31.35,39 CPU的相关指标 cat /proc/cpuinfo 物理的,核心的,超线程的? lscpu RHEL6支持 L1d cache 级数据缓存 L1 I Cache 一级指爷缓存 L2 二级缓存(L2是否共享?) Thread(s) per core 线程数为1,不支持超线程 Core(s) per socket CPU核数 SMP(UMA)和NUMA架构 SMP(Symmetric Multi-Processor 内存控制芯片,即北桥 ICH I/O控制芯片,即南桥,连接外设,硬盘,USB,慢速PC总线设备 3/26 资源由www.eimhe.com美河学习在线收集提供 UMA or SMP CPU O CPU 1 COAE cai CE DER2 DDH MCH FCle *lfi 5AT西 ICH PALe xl ISB 所谓对称多处理器结构,是指服务器中多个CPU对称工作,无主次或从属关系。各CPU共享相同的物理内存,每个CPU访问内存中的任何地址 所需时间是相同的,因此SMP也被称为一致存储器访问结构(UMA: Uniform Memory Access)。对SMP服务器进行扩展的方式包括增加内存 使用更快的CPU、增加CPU、扩充I(槽口数与总线数)以及添加更多的外部设备 缺点 SMP服务器的主要特征是共享,系统中所有资源(CPU、内存、I/0等)都是共享的。也正是由于这种特征,导致了SMP服务器的主要问题,那就 是它的扩展能力非常有限。对于SMP服务器而詈,每一个共享的环节都可能造成SMP服务器扩展时的瓶颈,而最受限制的则是内存。由于每个 CPU必须通过相同的内存总线访问相同的内存资源,因此随着CPU数量的增加,内存访问冲突将迅速增加,最终会造成CPU资源的浪费, 使CPU性能的有效性大大降低。实验证明,SMP服务器CPU利用率最好的情况是2至4个CPU。 NUMA(Non-Uniform Memory Access) IOH I/OHUB,也可以叫北桥 NUMA架构显著的特色是:内存划分成片,CPU访问本区的内存的时侯,速度非常快 4/26 资源由www.eimhe.com美河学习在线收集提供 NUMA CPU 0 CPU 1 CoHS COHELop I COE DORT H CDRE H MD64器制酵 inti, tH hyDe transron Poe n16 n时se0P IOH DMI HiE ICHPCle xt 由于SMP在扩展能力上的限制,人们开始探究如何进行有效地扩展从而构建大型系统的技术,NUMA就是这种努力下的结果之一。利用NUMA 技术,可以把几十个CPU(甚至上百个CPU)组合在一个服务器内。 NUMA服务器的基本特征是具有多个CPU模块,每个CPU模块由多个CPU组成,并且具有独立的本地內存、IO槽口等。由于其节点之间可以通 过互联模块(如称为 Crossbar Switch进行连接和信息交互,因此每个CPU可以访问整个系统的内存(这是NUMA系统与MPP系统的重要差别)。显 然,访问本地内存的速度将远远高于访问远地內存(系统内其它节点的内存)的速度,这也是非一致存储访问NUMA的由来。由于这个特点,为 了更好地发挥系统性能,开发应用程序时需要尽量减少不同CPU模块之间的信息交互。利用NUMA技术,可以较好地解决原来SMP系统的扩展 问题,在一个物理服务器内可以支持上百个CPU 缺点 NUMA技术同样有一定缺陷,由于访问远地内存的延时远远超过本地内存,因此当CPU数量增加时,系统性能无法线性增加。如HP公司发布 Superdome服务器时,會公布了它与HP其它UNⅨ服务器的相对性能值,结果发现,64路CPU的 Superdome(NUMA结构)的相对性能值是20 而8路N4000(共享的SMP结构)的相对性能值是63。从这个结果可以看到,8倍数量的CPU换来的只是3倍性能的提升。 numa的陷阱的问题。现象是当你的服务器还有内存的时候,发现它已经在开始使用swap了,甚至已经导致机器出现停滞的现象。这个就有可 能是由于numa的限制,如果一个进程限制它只能使用自己的numa节点的内存,那么当自身 numa node内存使用光之后,就不会去使用其他 numa node的内存了,会开始使用swap,甚至更糟的情况,机器没有设置swap的时候,可能会直接死机!所以你可以使用ηumad凵- interleave=d来取消 numa node的限制。 NUMA相关的策略 1、每个进程(或线程)都会从父进程继承NUMA策略,并分配有一个优先node。如果NUMA策略允许的话,进程可以调用其他node上的资 源 2、NUMA的CPU分配策略有 cpunodebind、 physcpubind。 cpunodebind规定进程运行在某几个node之上,而 physcpubind可以更加精细地规定 运行在哪些核上。 3、NUMA的内存分配策略有 localalloc、 preferred、 membind、 interleave。 localalloc规定进程从当前nde上请求分配内存 而 preferred比较宽松地指定了一个推荐的node来获取内存,如果被推荐的node上没有足够内存,进程可以尝试别的node pembina可以指定若干个node,进程只能从这些指定的node上请求分配内存。 interleave规定进程从指定的若干个node上以RR( Round robin轮询调度)算法交织地请求分配内存。 1 centos安装支持numa命合 install numactl 2验证系统是否支持numa 5/26 资源由www.eimhe.com美河学习在线收集提供 dmesg| grep -I numa查看输出结果 如果输出结果为 No NUMA configuration found 说明numa为 disable,如果不是上面的内容说明numa为 enable Root@localhost nv]# dmesg grep -i numa 0.00000NUMA:Node0[mem0x0000000×0009f1+[mem0×00100000×0ff>[ mem ox000000x0fft [0.0000001NUMA: Node o[mem0×0000000-00fff+[mem0x1000000×7ff->[mem0×0000000X7ffff 3查看numa的状态 numastat [root@localhost N]# numastat node numa hit 878502 numa miss 0 numa foreign interleave hit 20212 local node 878502 other node numa hit是打算在该节点上分配内存,最后从这个节点分配的次数; num miss是打算在该节点分配内存,最后却从其他节点分配的次数 num foregin是打算在其他节点分配内存,最后却从这个节点分配的次数; interleave hil是采用 interleave策略最后从该节点分配的次数; loca|node该节点上的进程在该节点上分配的次数 other node是其他节点进程在该节点上分配的次数 4、查看numa相关信息,包括每个node内存大小,每个node中的逻辑cpu numact -hardware rootGHOSTo5 - f rootGHOSTo5 numact I --har dware available: 2 nodes (0-1) node0cpus:012345121314151617 node o size: 48757 MB node o free: 11970 MR node1cpus:67891011181920212223 node i free: t76 MB/log csdn. net/ shaoyunzhe node distances node 1 0:1021 1:2110 LrootaHOSTO5 n]# cpunodebind=node绑定cpu绑定到node physcpubind=cpus将进程和cpu绑定 --membind 3spo工具 yum install hwloc root@localhost n]# lstopo-no-graphics Machine(1986MB Package L#0+L3L#0(6144KB)+L2L#0(256KB)+L1dL#0(32KB)+L1L1#0(32KB) Core L*0+ PU L#0(P#0 Core L# 1+PU L#1(P#1) Package L#1+L3 L#1(6144KB)+ L2 L#1(256KB)+ Lld L#1(32KB)+ Lli L#1(32KB) Core L#2+ PU L#2(P#2 Core L#3+ PU L#3(P#3 HostBridge l#o PCI8086:7111 PCI 15ad: 0405 GPU L#0 cardo' GPU L#1 renderd128 GPU L#2 controld64 PCI1000:0030 Block (Disk)L#3"sda 6/26 资源由www.eimhe.com美河学习在线收集提供 PCIBridge PCI8086:100f NetL#4"eno16777736 PCI 15ad: 07e0 Block(Removable Media Device )L#5srO 进程 进程是什么? 程序是一个文件,而 process是一个执行中的程序实例。 inu系统中创建新进程使用fork(系统调用。 利用分时技术,在nux操作系统上同时可以运行多个进程,当进程的时间片用完时, kernel!利用调度程序切换到另一个进程去还行。 内核中的调度程序用于选择系统中下一个要运行的进程。你可以将调度程序看做在所有出于运行状态的进程之间分配CPU运行时间的管理代 码。为了让进程有效的使用系统资源,又能让进程有较快的相应时间,就需要对进程的切换调庋采用一定的调度策略。 [root@client test] grep hz /boot/config- 3. 10.0-327 el7X86_64 CONFIG_NO HZ_ COMMON=y CoNFig Hz Periodic is not se CONFIG No HZ IDlE is not set CONFIG_NO_HZ_FULL=y CoNFiG NO Hz FULL ALL is not set CONFIG_NO Hz=y config RCU fast no hz is not set Config hz 100 is not set CoNFig Hz 250 is not set config hz 300 is not set CONFIG_HZ_1000=y -- 1秒1000次 CONFIG HZ= 1000 CONFIG MACHZ WDT=m 频率高响应速度高吞吐量低 频率低响应速度底吞吐量高 (根据应用需求选择 每接收到一个时钟中断就要处理另一个任务调度器--根据调度算法 tmer时钟中断 可以用 watch -n1cat/pro/ /interrupts来查看一下时钟中断 ps命合的使用 状态说明 D不可中断睡眠一般是由IO操作 watch-n1psax| grep find'测试 R运行状态在运行队列内 s sleep睡眠状态可中断psax| grep firefox T停止状态正在进行任务控制信号 W26内核无效 X已死看不到 Z存数据的内存空间已经释放回收了pd的结构还在消耗很小 内存不会碍事重启杀不死 For BsD formats and when the stat keyword is used, additional characters may be displayed c high-priority(not nice to other users N low-priority (nice to other users) L内存页被锁住了比如有一个程序运行需要消耗很多的内存内 存空间不足了就会将不活跃的进程占有的内存交换到虚拟内存中需要时在交换回 来称为换出换入,如果有个进程想即使不活跃也不要捋该进程内存交换出去, 这是我们就可以锁这些内存页有开发者来做这样的操作更安全,避免其他程 序读取改程序交换出去之后留在内存中的数据 7/26 资源由www.eimhe.com美河学习在线收集提供 s会话头就是一个父进程 表示以线程方式工作 表示是一个进程组而不是一个进程 UX USER PID %CPU VMEM VSZ RSS TTY STAT START TIME COMMAND root10.00.0193601532?Ss11:28 0: 03/sbin/init root 20.00.000?S11:28 0: 00 [kthreadd root 30.00.000?S11:28 0: 00 [migration/0 40.00.000?S11:28 0: 00 [ksoftirqd o %CPU消耗的cpu百分比 %MEM消耗内存百分比 VSZ虚拟消耗内存大小自身消耗和公共消耗 RSs实际消耗内存 ps auX-p3288w宽幅显示-p只显示某一个进程 ps命合格式3中 1unⅸx选项有一个 2BSD选项没有- 3GNU有两个 还可以 ps-o user, pid, %/cpu-p 3288 ps- eo user;pd,%Cpu-ort%cpu升序%cpu降序 top命合 P按Cpu排序 M按内存排序 f添加删除字段 q退出 k给进程发送信号 FS UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4s0292129100800-27116 wait pts/1 00:00:00bash 4R0426129213800-27032-pts/1 00:00:00ps nice(-20~19) nice renice pr值范围是多少呢? 进程优先级(pr): 0-139其中0号为优先级最高,139为最低 0-99实时进程优先级别范围,0号保留,设置时使用1-99 100-139非买时进程的优先级别范围(由nie值映射过来) 8/26 资源由www.eimhe.com美河学习在线收集提供 CFS Scheduler Priority gher Priorit Lower Priority 01 H7 P8 System Priority LL Real-time Priority 18世 H LPY 01 20 189 top [PR] Real time priorities 99 to 1 are static Nice value-20 to 19 are dynamic(Kernel can change it by +/-5 调节调度策略 Linux调度器执行大量的调度原则,以此决定线程运行的位置和时长。调度原则主要有两类:普通原则和实时原则。普通原则用于普通优先级 任务,实时原则用于具有时效性且必须无中断完成的任务 实时线程不受时间间隔的控制,这意味着它们枬一直运行值至它们阻拦、退出、主动让步或是被更高优先权的线程预先安置。最低优先权的实 时线程会先于其他普通原则的线程进行调度。 SCHED FIFO静态优先级调度 SCHED_FiFo(也叫做静态优先级调度)是一顼实时策略,定义了每个线程的固定优先级。这一策略让管理员能改进事件响应的时间并减少延 迟,这一策略建议无法运行较长时间且具有时效性的任务使用。在使用 SCHED FIFO时,调度器会按优先级顺序扫描所有的 SCHED FIFO线 程,并对准备运行的最高优先级线程进行调度。一个 SCHED FIFO线程的优先级级别可以是1至99之间的任何整数,99是最高优先级。红 帽建议一开始使用较小的数字,在确定了延迟问题后再增加优先级。 管理员可以限制 SCHED FIFO的带宽以防止实时应用程序的程序员启用独占处理器的实时任务。 /proc/sys/kernel/sched rt_ period_ us 该参数以微秒为单位来定义时间,是百分之百的处理器带宽。默认值为100000u,或1秒。 /proc/sys/kernel/sched rt runtime_us 该参数以微秒为单位来定义时间,用来运行实时线程。默认值为950000us,或0.95秒。 SCHED RR轮循优先级调度 SCHED RR是 SCHED FIFO的一个轮循变形。这一策略在同优先级的多线程需要运行时很有用。 正如 SCHED_FIFO, SCHED RR是一项实时策略,定义了每个线程的固定优先级。调度器会按优先级顺序扫描所有的 SCHED RR线程,并对 准备运行的最高优先级线程进行调度。但是,和 SCHED FIFO不同,同优先级的线程在一定的时间间隔内是以循环的方式进行调度的。 用户可以使用 sched rr timeslice ms内核参数,并毫秒为单位设定这一时间间隔(/proc/sys/ kerne/ sched rr timeslice ms)。最小值为1毫 秒 SCHED OTHER普通调度 SCHED_ OTHER是红帽企业版Linu中默认旳调度策略。这一策略使用CFS(完全公平排程器)让处理器能够平等地访问用此策略调度的 所有线程。这一策略在有大量线程或数据吞吐量优先时最为有用,因为它能够随着时间而更为有效地调度线程。在使用这一策略时,调度器会 创建一个动态优先级列表,此列表一部分是基于每个进程线程的进程优先级。管理员可以改变一个进程的进程优先级,但是不能直接改变调度 器的动态优先级列表。 9/26 资源由www.eimhe.com美河学习在线收集提供 查看进程的调度策略 [root@client tmp]# chrt-p 1 pid1的当前调度策略: SCHED OTHER pid1的当前调度优先级:0 root@client tmp]# chrt-p 2 pid2的当前调度策略: SCHED_ OTHER pid2的当前调度优先级:0 root@client tmp]# chrt-p 3 pid3的当前调度策略: SCHED_ OTHER pid3的当前调度优先级:0 [root@client tmp]# chrt-p 7 pid7的当前调度策略: SCHED_FIFO id7的当前调度优先级:99 设置进程调度策略chrt CPU亲和力 在多核情况下,可以认为指定在哪颗CPU上执行程序 taskset taskset-co/ash taskset值得是cpu亲和力 进程和线程有本质的区别 线程模式创建和撒销开销小资源竞争问题 进程模式创建和撤销开销大没有资源竞争问题 线程多线程进程 进程单线程进程 如 apache线程和进程模式多核 每秒处理并发访问量达到1000 进程方式单位时间呢创建撤销1000进程 线程方式范围时闫内创建撤销1000线程 这是线程表现较好 启动 apache线程模式 ps-L-ppid显示所有线程p轻量级线程pd ab-n1000-c1000http://localhost/index.htm测试 当2000时 apache挂了ab命合最多支持2个万测试 测试 ngInx 单进程和多进程 加大页面内容 cDs每秒的并发连接数TCP) qps每秒的并发请求数GET/HEAD/ DELETE/PUT 实现cpu的绑定有专门工具(非numa也可以用) taskset 0x000000001 0001:0号cpu 0×000000003 0011:0号和1号cpu 0×000000005 0101:0和2 0x000000007 0111:01和2 taskset-p mask pid taskset-p-c3 pid 绑定程序的cpu会不会在运行其它的进程?当前会调度到该cpu 10/26

...展开详情
img
  • 至尊王者

    成功上传501个资源即可获取

关注 私信 TA的资源

上传资源赚积分,得勋章
    最新推荐