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

【原】Linux各层面可调性能参数介绍

阅读更多

       上次简单介绍了下,linux的cpu,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去执行的;如果在一个时间片调度线程1在cpu1上运行,另外一个时间片调度线程1在cpu2上去运行,这样会造成线程执行速度慢,性能降低。为什么呢? 我们知道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等文件操作;这就是之所以我们可以在linux上mount多种不同格式的文件系统的,而window确不行; 当然基于:虚拟文件系统,文件系统,文件系统驱动程序,硬件特性方面,都能找到性能瓶颈;
1.选择适合应用的文件系统;
2. 调整进程I/O请求的优先级,分三种级别:1代表 real time ; 2代表best-effort; 3代表idle ;
如:ionice -c1 -p1113(给进程1113的I/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对于keeplive的tcp连接有一个默认的过期时间;可以减小这个时间,让没用的连接释放掉,毕竟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去亲和这个类型中断,避免频繁的中断,影响线程调度性能)


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

1
1
分享到:
评论
1 楼 lingqi1818 2011-02-16  
系统层面的参数一发动全局啊,万不得已还是不建议随便调的好。自己玩玩还可以。

相关推荐

    Linux 服务器的那些性能参数指标

    一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息。通常来说运维人员、系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其...Linux 服务器的那些性能参数指标.pdf

    linux-Linux性能优化实战案例

    在《Linux性能优化实战》案例中,我们深入探讨了如何利用Linux系统工具和技术来提升系统的运行效率和性能。Linux作为一款开源操作系统,其强大的可定制性和丰富的工具集使其成为性能优化的理想平台。以下是一些核心...

    嵌入式Linux内存与性能详解-史子旺

    《嵌入式Linux内存与性能详解》一书由史子旺撰写,专注于深入解析Linux内存管理机制以及如何在嵌入式环境中优化系统性能。Linux内存管理是操作系统的核心部分,理解和掌握这一领域对于开发者来说至关重要,尤其是在...

    Linux性能参数.doc

    Linux性能参数对于优化系统运行效率至关重要,理解和监控这些参数能够帮助我们发现并解决潜在的系统瓶颈。以下将详细探讨Linux中的关键性能指标。 首先,我们要关注的是处理器参数。CPU利用率(CPU utilization)是最...

    Linux高性能服务器编程,linux高性能服务器编程 pdf,C,C++

    《Linux高性能服务器编程》这本书是针对那些希望深入理解并掌握Linux环境下服务器开发技术的...通过学习这本书,读者将能够从多个层面理解和实践Linux高性能服务器编程,从而设计和构建出更为高效、稳定的服务端应用。

    基于Linux内核的网络性能优化.pdf

    内核参数优化过程相对比较复杂,需要综合考虑Linux系统各方面影响因素,比如:如果是支持Oracle数据库应用,则需要对共享内存段、系统信号量、文件句柄等各项参数进行全面优化。如果需要支持Web应用,则需要按照Web...

    通过调整Linux TCP参数提示服务器性能

    本文将介绍如何通过调整 Linux TCP 参数来提高服务器性能。 一、TCP 参数介绍 TCP 参数是 Linux 中的一组控制 TCP 协议行为的变量,存储在 /proc/sys/net/ipv4 目录中。这些参数控制着 TCP 连接的建立、保持和终止...

    Linux高性能服务器编程电子版

    《Linux高性能服务器编程》这本书是针对那些希望深入理解如何在Linux环境下构建高效、稳定服务器的开发者和运维人员的宝贵资源。书中的内容涵盖了广泛的Linux系统编程和服务器优化技术,旨在帮助读者提升系统的性能...

    WAS V8.5 for Linux 安装以及性能调优概要

    在本概要中,我们将对 WAS V8.5 for Linux 的安装和性能调优进行详细的介绍。 安装思路 在安装 WAS V8.5 for Linux 之前,我们需要准备好安装介质和 LINUX 环境基本参数检查。在安装过程中,我们需要上传介质,...

    linux服务器性能调整

    内容涵盖了从内核层面到应用层面的全面优化,旨在帮助读者掌握提高Linux服务器性能的关键技能。 书中的内容包括但不限于: 1. **系统监控**:讲解如何使用各种工具(例如top、vmstat、iostat、sar等)来监控系统...

    嵌入式LINUX内存使用与性能优化.pdf

    针对linux内存的使用,详细讲解了如何优化内存,及性能的提高

    linux 下tcp参数优化

    本文将详细介绍 Linux 下 TCP 参数的优化,包括 CLOSE_WAIT 状态的生成原因、proc/sys/net/ipv4/ 中各项参数的意义和调整方法。 CLOSE_WAIT 状态的生成原因 CLOSE_WAIT 状态是 TCP 连接中一种常见的状态。当服务器...

    嵌入式LINUX内存使用与性能优化

    本书《嵌入式Linux内存使用与性能优化》主要围绕这两个问题进行了深入的探讨和分析。 内存使用方面,书中提出了两项核心任务:一是提高系统整体的空闲内存数量,从而提升进程的并发能力;二是在系统长时间运行后,...

    优化Linux系统性能.pdf

    下面利用基本的系统情况查查看程序,再根据得到的信息使用适当的工具优化系统,使它超越默认的设置而获得更好的性能(Linux通常在启动时便设置了默认参数)。虽然局部的调整看起来效果不大,但整体的效果将是很有效...

    Linux性能测试工具

    在IT领域,尤其是在服务器...总结来说,Linux性能测试和调优涉及多个层面,包括使用各种监控工具发现性能瓶颈,理解并调整系统参数,以及优化网络设置等。通过学习和实践,我们可以使Linux系统运行得更加高效和稳定。

    Linux简单调优与JVM参数.docx

    本文主要介绍了 Linux 服务器调优和 JVM 参数调优的相关知识点,以便提高服务器性能和 JVM 应用程序的运行效率。 Linux 服务器调优 Linux 服务器调优是指对 Linux 操作系统的配置和调整,以提高服务器的性能和稳定...

Global site tag (gtag.js) - Google Analytics