`
LSQ6063
  • 浏览: 68049 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【性能优化领域】linu各层面可调性能参数介绍

阅读更多

上次简单介绍了下,linuxcpu,memory,disk i/o; net i/o 性能监控的一些工具;这节就介绍下,这些层面上出现瓶颈时,怎样调节内核,有那些内核参数可以调节来获得性能的提升; 下节介绍下:怎么识别性能瓶颈,当然只是空想了,怎样识别需要具体问题具体对待了;
   
希望对这些参数的介绍使大家对于linux的内核有一定的认识;

第一节:cpu 性能瓶颈

计算机中,cpu是最重要的一个子系统,负责所有计算任务;基于摩尔定律的发展,cpu是发展最快的一个硬件,所以瓶颈很少出现在cpu上;我们线上环境的cpu都是多核的,并且基于SMP(symmetric multiprocessing)结构的。通过观察线上机器cpu使用率会发现,使用率很低很低,不到5% 说明我们的资源浪费情况多么严重啊;(但为什么不能一台机器多部署几个应用呢,后边我会解释); 我们线上的cpu一个核支持超级线程,也就是一个核上可以并行运行几个线程)

1. 通过调整进程优先级调整: nice 命令来调整进程优先级别;可调范围(-20 19 如: renice 5 pid

2.通过调整cpu的亲和度来集中处理某一个中断类型:将系统发出的中断都绑定在一个cpu上,这样其他cpu继续执行自己正在执行的线程,不被中断打扰,从而较少了线程上下文切换时间,增强性能;

注: cpu亲和度的概念: 在多核cpu中,linux操作系统抢占式调度系统,按照cpu时间片/中断/ 不断调度进程给cpu去执行的;如果在一个时间片调度线程1cpu1上运行,另外一个时间片调度线程1cpu2上去运行,这样会造成线程执行速度慢,性能降低。为什么呢? 我们知道SMP上多核都是共享L1 ,L2 CPU Cache的。并且各个核的内存空间都是不可共享的,一个线程如果多次时间片上在不同的cpu上运行,会造成cache的不断失效和写入;性能会降低; linux的进程调度有个亲和度算法可以将尽量将进程每次都调度到同一个cpu上处理;linux调度时当然也有Loadbalance算法保证进程调度的均匀负载的;

例如: echo 03 > /proc/irq/19/smp-affinity (将中断类型为19的中断绑定到第三个cpu上处理)

第二节:内存性能瓶颈

首先,linux的内存管理是聪明和智能的;linux通过(virtual memory manage)来管理内存的; 对于大多数应用,linux是不直接写到硬盘上去的,而是先写到 virtual memory manage 管理的文件系统缓存(也在内存中的) .方便应用的后续的读请求;因为和磁盘的I/O操作是昂贵的;linux会根据一些算法策略适当的时候同步到硬盘的;这就是为什么我们运行linux一段时间后,发现可用内存那么少的原因,多数被cache+buffer占用咧;

所以我们提高性能的办法就是减少写到磁盘的次数,提高每次写磁盘时的效率质量;

1. 通过调节缓存的脏数据同步到硬盘的策略:(脏数据表示没有被当前的线程使用的数据)

例如: echo 10 > /proc/sys/vm/dirty_background_rato (当脏数据占据物理内存10%时,触发pdflush同步到硬盘):小心调节,会大幅度的影响性能;

          echo 2000 > /proc/sys/vm/dirty_expire_centisecs (当脏数据在物理内存的逗留时间超过2000ms时被同步到硬盘);

2.通过调节swap参数,来优化linux虚拟内存管理:基于程序的局部性原理,linux通过虚拟内存机制来实现并发运行进程,linux发现物理内存不够用时,会根据LRU算法将一部分内存swap out到硬盘;当运行被换出的那个线程时,在swap in 到内存里;

例如: echo 10 > /proc/sys/vm/swappiness(值为0表示尽量都用物理内存,值为100表示积极的使用swap分区;)这个参数很重要;小心调节; 一般为60;

第三节: 磁盘I/O可调性能参数

 linux的子系统VFS(virtural file system)虚拟文件系统;从高层将各种文件系统,以及底层磁盘特性隐藏,对程序员提供:read,write,delete等文件操作;这就是之所以我们可以在linuxmount多种不同格式的文件系统的,而window确不行; 当然基于:虚拟文件系统,文件系统,文件系统驱动程序,硬件特性方面,都能找到性能瓶颈;

1.选择适合应用的文件系统;

2. 调整进程I/O请求的优先级,分三种级别:1代表 real time ; 2代表best-effort; 3代表idle ;

   如:ionice -c1 -p1113(给进程1113I/O优先级设置为最高优先级)

3.根据应用类型,适当调整page size block size;

4.升级驱动程序;

第四节 :网络可调性能参数

对于我们web应用来说,网络性能调整如此重要,linux的网络支持是无与伦比的;是作为网络服务器的首先;对于web服务来说:除了应用的响应速度外,linux网络管理子系统,网卡,带宽都可能成为性能瓶颈;

1.查看网卡设置是否全双工传输的: echtool  eth0

2. 设置MTU(最大传输单元),在带宽G以上的时候,要考虑将MTU增大,提高传输性能;如: ifconfig eth0 mtu 9000 up

3. 增加网络数据缓存;传输数据时linux是将包先放入缓存,填满缓存后即发送出去;读操作类似;

sysctl -w net.ipv4.tcp_rmem="4096 87380 8388608" :设置tcp读缓存:最小缓存,初始化时,最大缓存

sysctl -w net.ipv4.tcp_wmem="4096 87380 8388608" :设置tcp写缓存:最小缓存,初始化时,最大缓存

4.禁用window_scaling,并且直接设置window_size;(就像我们经常设置jvm的参数:xms = xmx一样

sysctl -w net.ipv4.tcp_window_scaling=0

5.设置TCP连接可重用性: 对于TIME_OUT状态的TCP连接可用于下一个TCP重用,这样减少了三次握手和创建时间,非常提高性能,尤其对于web server

 如: 开启可重用tcp功能: sysctl -w net.ipv4.tcp_tw_reuse=1  sysctl -w net.ipv4.tcp_tw_recyle=1 

6.禁用掉没必要的tcp/ip协议功能:比如icmp;broadcast包的接收;

7. linux对于keeplivetcp连接有一个默认的过期时间;可以减小这个时间,让没用的连接释放掉,毕竟tcp连接数是有限的嘛;

 如: sysctl -w net.ipv4.tcp_keepalive_time=1800 (设置过期时间,1800s)

8.设置最大tcp正在连接状态(还没ESTABLISHED)队列长度;避免由于太多的tcp连接过来,导致服务器挂掉;比如DoS攻击

如:sysctl -w net.ipv4.tcp_max_syn_backlog=4096

9. 绑定tcp类型的中断到一个cpu上;(让cpu去亲和这个类型中断,避免频繁的中断,影响线程调度性能)


 

总结: 我们在性能优化一个应用时,首要的是设定优化要达到的目标,然后寻找瓶颈,调整参数,达到优化目的;但是寻找瓶颈时可能是最累的,要从大范围,通过很多用例,很多测试报告,不断的缩小范围,最终确定瓶颈点;以上这些参数只是个认识,系统性能优化中可能用到,但并不是放之四海而皆准的; 有的参数要边测试,边调整的;

 

--摘自同事手笔

分享到:
评论

相关推荐

    linu系统性能参数调整策略

    ### Linux系统性能参数调整策略 在现代计算环境中,Linux因其高度可定制性和强大的性能管理工具而备受青睐。本文将深入探讨Linux系统性能分析与调整的基本方法,特别关注CPU、内存、磁盘与网络等关键资源的监控与...

    IOZONE参数使用详解

    本文档将详细介绍IOzone所能执行的各种类型的操作以及其命令行参数,帮助用户更好地理解和应用这一工具。 #### 二、IOzone支持的操作与特性 **支持的操作:** - **Read:** 测试读取现有文件的性能。 - **Write:** ...

    嵌入式linu学习规划

    2. **任务调度**:学习任务调度算法,了解如何优化系统性能。 3. **I/O管理**:掌握输入输出设备的管理和控制技术。 4. **总线管理**:了解总线的工作原理及管理方法。 **推荐教材**: - 《计算机操作系统》 - ...

    Linu系统调优手册.pdf

    - **文件系统调优**:选择合适的文件系统类型,调整文件系统参数,优化I/O性能,例如选择日志模式,调整文件系统块大小,合理分区等。 - **网络调优**:了解网络基础知识,调整内核网络参数,如TCP/IP栈设置,以...

    linu下cadence的patch包

    这个"linu下cadence的patch包"显然包含了针对Cadence工具的补丁,用于更新或修复软件中的问题,提升性能或者兼容性。补丁在软件开发和维护中扮演着至关重要的角色,它们通常是开发者为了修正错误(bug)、增强功能或...

    Linu内核分析

    - **软件开发**:掌握内核原理有助于开发更高性能的应用软件,尤其是在系统编程和网络编程领域。 - **教学科研**:Linux内核是计算机科学教育和研究的重要案例,有助于学生和研究者深入了解操作系统原理。 #### 1.5...

    嵌入式Linux在消费电子领域前景分析

    嵌入式Linux在消费电子领域的前景正日益显现,这一趋势主要得益于Linux的开源特性及其在性能优化、开发效率和市场影响力方面的优势。Linux作为一个开放源码的系统,不仅在服务器领域占据一席之地,而且逐渐渗透到...

    linu学习资料

    Linux 4.x系列内核包含了众多改进和新特性,如更好的内存管理、网络性能优化、文件系统更新等。通过阅读和分析源代码,学习者可以了解到如何设计和实现一个复杂的操作系统内核,同时也能提升解决问题的能力。此外,...

    Linu系统配置DNS服务器

    ### Linu系统配置DNS服务器知识点详解 #### 一、实验环境 - **操作系统**: CentOS 6.4 - **DNS服务器软件**: BIND (Berkeley Internet Name Domain) #### 二、DNS服务器配置概述 DNS服务器(Domain Name System)...

    Linu编程GCC手册

    ### Linu编程GCC手册知识点概览 #### 一、GCC简介 GCC(GNU Compiler Collection)是一套由GNU项目开发的编译器集合,它支持多种编程语言,包括但不限于C、C++、Objective-C、Fortran、Ada、Go等。本手册主要介绍了...

    myself linu x(2)

    myself linu x(2)myself linu x(2)myself linu x(2)myself linu x(2)myself linu x(2)

    linu 下安装 websphere 手册

    linu下安装websphere手册,一目了然

    linu字符设备开发.ppt

    linu字符设备开发

    Tomcat7-Linu版本

    总结来说,"Tomcat7-Linu版本"涵盖了在Linux环境下安装、配置、管理和优化Apache Tomcat 7.0.82的全过程。理解并熟练掌握这些步骤,对于开发和运维Java Web应用至关重要。同时,提供的两个URL链接,"IT猫扑网_百度...

    嵌入式Linu某Android学习路线图.docx

    在嵌入式领域,这些理论需要转化为实际的算法并在特定硬件上优化。 - 工程实现:将专业领域的概念应用到产品开发中,例如使用OpenCV进行图像处理。这类工作需要了解并能利用开源资源实现目标。 2. 业务领域(应用...

    超牛中国移动LINU经典培训资料

    【超牛中国移动LINU经典培训资料】是一份深入学习Linux操作系统的宝贵教程,特别是针对RedHat Linux 9.0版本。这份资料详细介绍了Linux的基础知识,包括系统的安装、常用命令的使用、系统管理以及vi编辑器的操作,...

    linu驱动程序开发

    Linux驱动程序开发是嵌入式系统和服务器领域中的核心技能之一,它涉及到操作系统与硬件设备之间的交互。在Linux系统中,驱动程序是软件与硬件之间的桥梁,使得操作系统能够有效地管理和控制硬件设备。以下是对Linux...

Global site tag (gtag.js) - Google Analytics