Linux内核内存性能调优

2023-07-15

linux 内核参数优化

作为高性能WEB服务器,只调整Nginx本身的参数是不行的,因为Nginx服务依赖于高性能的操作系统。

以下为常见的几个Linux内核参数优化方法。

  • net.ipv4.tcp_max_tw_buckets

  • 对于tcp连接,服务端和客户端通信完后状态变为timewait,假如某台服务器非常忙,连接数特别多的话,那么这个timewait数量就会越来越大。
    毕竟它也是会占用一定的资源,所以应该有一个最大值,当超过这个值,系统就会删除最早的连接,这样始终保持在一个数量级。
    这个数值就是由net.ipv4.tcp_max_tw_buckets这个参数来决定的。
    CentOS7系统,你可以使用sysctl -a |grep tw_buckets来查看它的值,默认为32768,
    你可以适当把它调低,比如调整到8000,毕竟这个状态的连接太多也是会消耗资源的。
    但你不要把它返团知调到几十、几百这样,因为这种状态的tcp连接也是有用的,
    如果同样的客户端再次和服务端通信,就不用再次建立新的连接了,用这个旧的通道,省时省力。

  • net.ipv4.tcp_tw_recycle = 1

  • 该参数的作用是快速回收timewait状态的连接。上面虽然提到系统会自动删除掉timewait状态的连接,但如果把这样的连接重新利用起来岂不是更好。
    所以该参数设置为1就可以让timewait状态的连接快速回收,它需要和下面的参数配合一起使用。

  • net.ipv4.tcp_tw_reuse = 1

  • 该参数设置为1,将timewait状态的连接重新用或盯于新的TCP连接,要结合上面的参数一起使用。

  • net.ipv4.tcp_syncookies = 1

  • tcp三次握手中,客户端向服务端发起syn请求,服务端收到后,也会向客户端发起syn请求同时连带ack确认,
    假如客户端发送请求后直接断开和服务端的连接,不接收服务端发起的这个请求,服务端会重试多次,
    这个重试的过程会持续一段时间(通常高于30s),当这种状态的连接数量非常大时,服务器会消耗很大的资源,从而造成瘫痪,
    正常的连接进不来,这种恶意的半连接行为其实叫做syn flood攻击。
    设置为1,是开启SYN Cookies,开启后可以避免发生上述的syn flood攻击。
    开启该参数后,服务端接收客户端的ack后,再向客户端发送ack+syn之前会要求client在短时间内回应一个序号,
    如果客户端不能提供序号或者提供的序号不对则认为该客户端不合法,于是不会发ack+syn给客户端,更涉及不到重试。

  • net.ipv4.tcp_max_syn_backlog

  • 该参数定义系统能接受的最大半连接状态的tcp连接数。客户端向服务端发送了syn包,服务端收到后,会记录一下,
    该参数决定最多能记录几个这样的连接。在CentOS7,默认是256,当有syn flood攻击时,这个数值太小则很容易导致服务器瘫痪,
    实际上此时服务器并没有消耗太多资源(cpu、内存等),所以可以适当调大它,比如调整到30000。

  • net.ipv4.tcp_syn_retries

  • 该参数适用于客户端,它定义发起syn的最大重试次数,默认为6,建议改为2。

  • net.ipv4.tcp_synack_retries

  • 该参数适用于服务端,它定义发起syn+ack的最大重试次数,默认为5,建议改为2,可以适当预防syn flood攻击。

  • net.ipv4.ip_local_port_range

  • 该参数定义端口范围,系统默认保留端口为1024及以下,以上部分为自定义端口。这个参数适用于客户端,
    当客户漏消端和服务端建立连接时,比如说访问服务端的80端口,客户端随机开启了一个端口和服务端发起连接,
    这个参数定义随机端口的范围。默认为32768 61000,建议调整为1025 61000。

  • net.ipv4.tcp_fin_timeout

  • tcp连接的状态中,客户端上有一个是FIN-WAIT-2状态,它是状态变迁为timewait前一个状态。
    该参数定义不属于任何进程的该连接状态的超时时间,默认值为60,建议调整为6。

  • net.ipv4.tcp_keepalive_time

  • tcp连接状态里,有一个是established状态,只有在这个状态下,客户端和服务端才能通信。正常情况下,当通信完毕,
    客户端或服务端会告诉对方要关闭连接,此时状态就会变为timewait,如果客户端没有告诉服务端,
    并且服务端也没有告诉客户端关闭的话(例如,客户端那边断网了),此时需要该参数来判定。
    比如客户端已经断网了,但服务端上本次连接的状态依然是established,服务端为了确认客户端是否断网,
    就需要每隔一段时间去发一个探测包去确认一下看看对方是否在线。这个时间就由该参数决定。它的默认值为7200秒,建议设置为30秒。

  • net.ipv4.tcp_keepalive_intvl

  • 该参数和上面的参数是一起的,服务端在规定时间内发起了探测,查看客户端是否在线,如果客户端并没有确认,
    此时服务端还不能认定为对方不在线,而是要尝试多次。该参数定义重新发送探测的时间,即第一次发现对方有问题后,过多久再次发起探测。
    默认值为75秒,可以改为3秒。

  • net.ipv4.tcp_keepalive_probes

  • 第10和第11个参数规定了何时发起探测和探测失败后再过多久再发起探测,但并没有定义一共探测几次才算结束。
    该参数定义发起探测的包的数量。默认为9,建议设置2。
    设置和范例
    在Linux下调整内核参数,可以直接编辑配置文件/etc/sysctl.conf,然后执行sysctl -p命令生效。

20个你不得不知的Linux服务器性能调优技巧

linux是一种开源操作系统,它支持各种硬件平台,linux服务器全球知名,它和Windows之间最主要的差异在于,linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的。linux高可用服务器集群解决方案让IT系统管理员可以从容应对许多常见的硬件和软件故障,允许多台计算机一起工作,为关键服务正常运行提供保障,系统管理员可以不中断服务执行维护和升级。
  linux服务器有各种用途,如Web服务器或分支机构内部服务器,CMS或CRS服务器,文件服务器(为Windows和/或linux用户服务),VoIP电话服务器,邮件或域名服务器,数据库服务器,云计算配置中的基础设施节点等。
  linux功能丰富、强大、灵活,你可以用它完成各种任务,在这篇文章中,我们将讨论一些提高linux服务器性能的技巧。
  1、为磁盘I/O调整linux内核电梯算法
  在选择文件系统后,有一些内核和挂载选项可能会影响到它的性能表现,其中一个内核设置是电梯算法,通过调整电梯算法,系统可以平衡低延迟需求,收集足够的数据,以有效地组织对磁盘的读和写请求。
  2、禁用不必要的守护进程,节省内存和CPU资源
  每台服务器上都运行着许多守护进程或服务,而具有讽刺意味的是,有很多通常不是必需的,这些服务没有发挥作用,但却消耗了宝贵的内存和CPU时间。此外,它们可能将服务器置于危险境地,多运行一个服务就等于多向黑客打开一扇长驱直入的门,因此,你应该将它们从服务器移除,禁用它们最大的好处是可以加快启动时间,释放内存。另外,你可以减少CPU需要处理的进程数,禁用它们的另一个好处是增强服务器的安全性,因为越少的守护进程意味着可被攻击和利用的漏洞越少。
  下面是一些应该被禁用的linux守护进程,默认情况下,它们都是自动运行的:


  3、关掉GUI
  一般说来,linux服务器是不需要GUI的,所有管理任务都可以在命令行下完成,因此最好关掉GUI,重定向X显示或通过一个Web浏览器界面显示。为了禁用GUI,“init level(启动级别)”应该被设置为3(命令行登录),而不是5(图形登录),如果需要GUI,可以随时运行startx进入图形用户界面。
  4、清理不需要的模块或功能
  在服务器软件包中有太多被启动的功能或模块实际上是不需要的(如Apache中的许多功能模块),仔细查看Apache配置文件,确定FrontPage支持或其它额外的模块是否真的要用到,如果不需要,应该毫不犹豫地从服务器禁用掉,这样有助于提高系统内存可用量,腾出更多资源给那些真正需要的软件,让它们运行得更快。

5、禁用控制面板
  在linux中,有许多流行的控制面板,如Cpanel,Plesk,Webmin和phpMyAdmin等,相信每个linux初级用户都很喜欢这些控制面板,但是,禁用掉这些软件包可以释放出大约120MB内存,因此,我强烈建议禁用掉这些控制面板,除非它们真的需要用到,它们可以通过PHP脚本(尽管有些不安全),或命令行命令启用,这样做后,内存使用量大约可以下降30-40%。
  6、改善linux Exim服务器性能
  有许多种方法改善服务器的Exim性能,其中一个办法是使用DNS缓存守护进程,它可以降低解析DNS记录需要的带宽和CPU时间,DNS缓存通过消除每次都从根节点开始查找DNS记录的需求,从而改善网络性能,Djbdns是一个非常强大的DNS服务器,它具有DNS缓存功能,Djbdns比BIND DNS服务器更安全,性能更好,可以直接通过http://cr.***.to/下载,或通过Red Hat提供的软件包获得。
  7、使用AES256增强gpg文件加密安全
  为了提高备份文件或敏感信息的安全,许多linux系统管理员都会使用gpg进行加密,在使用gpg时,最好指定gpg使用AES256加密算法,AES256使用256位密钥,它是一个开放的加密算法,美国国家安全局(NSA)都使用它保护绝密信息,没有什么比它更安全的了。
  8、远程备份服务安全
  安全是选择远程备份服务最重要的因素,大多数系统管理员都害怕两件事:(黑客)可以删除备份文件,不能从备份恢复系统。
  为了保证备份文件100%的安全,备份服务公司提供远程备份服务器,使用scp脚本或RSYNC通过SSH传输数据,这样,没有人可以直接进入和访问远程系统,因此,也没有人可以从备份服务删除数据。在选择远程备份服务提供商时,最好从多个方面了解其服务强壮性,如果可以,可以亲自测试一下。
  9、更新默认内核参数设置
  为了顺利和成功运行企业应用程序,如数据库服务器,可能需要更新一些默认的内核参数设置,例如,2.4.x系列内核消息队列参数msgmni有一个默认值(例如,共享内存,或shmmax在Red Hat系统上默认只有33554432字节),它只允许有限的数据库并发连接,下面为数据库服务器更好地运行提供了一些建议值(来自IBM DB2支持网站):

  10、优化TCP
  优化TCP协议有助于提高网络吞吐量,跨广域网的通信使用的带宽越大,延迟时间越长时,建议使用越大的TCP linux大小,以提高数据传输速率,TCP linux大小决定了发送主机在没有收到数据传输确认时,可以向接收主机发送多少数据。
  11、选择正确的文件系统
  使用ext4文件系统取代ext3。
  ● Ext4是ext3文件系统的增强版,扩展了存储限制
  ●它具有日志功能,保证高水平的数据完整性(在非正常关闭事件中)
  ●在非正常关闭和重启时,它不需要检查磁盘(这是一个非常耗时的动作)
  ●更快的写入速度,ext4日志优化了硬盘磁头动作
  12、使用noatime文件系统挂载选项
  在文件系统启动配置文件fstab中使用noatime选项,如果使用了外部存储,这个挂载选项可以有效改善性能。

 13、调整linux文件描述符限制
  linux限制了任何进程可以打开的文件描述符数量,默认限制是每进程1024,这些限制可能会阻碍基准测试客户端(如httperf和apachebench)和Web服务器本身获得最佳性能,Apache每个连接使用一个进程,因此不会受到影响,但单进程Web服务器,如Zeus是每连接使用一个文件描述符,因此很容易受默认限制的影响。

Linux 性能调优都有哪几种方法

1、Disabling daemons (关闭 daemons)
2、Shutting down the GUI (关闭GUI)
3、Changing kernel parameters (改变内核参数)
4、Kernel parameters (内核参数)
5、Tuning the processor subsystem(处理器子系统调优)
6、Tuning the memory subsystem (内存子系统调优)
7、Tuning the file system(文件系统子系统调优)
8、Tuning the network subsystem(网络子系统调优)

文章推荐

相关推荐