热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux内核优化参数

linux内核优化参数作为高性能WEB服务器,只调整Nginx本身的参数是不行的,因为Nginx服务依赖于高性能的操作系统。以下为常见的几个Linux内核参数优化方法。net.ip

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服务器进行优化设置和安全设置

1、 关闭不需要的服务 这个应该很容易理解的,凡是我们的系统不需要的服务,一概关闭,这样一个好处是减少内存和CPU时间的占用,另一个好处相对可以提高安全性 那么哪些服务是肯定要保留的呢? 在linux机器上通常有四项服务是必须保留的 iptables linux下强大的防火墙,只要机器需要连到网上,哪里离得开它 network linux机器的网络,如果不上网可以关闭,只要上网当然要打开它 sshd 这是openssh server,如果你的机器不是本地操作,而是托管到IDC机房, 那么访问机器时需要通过这个sshd服务进行 syslog 这是linux系统的日志系统,必须要有, 否则机器出现问题时会找不到原因 除了这四项必需的服务之外,其他的服务需要保留哪些呢? 这时就可以根据系统的用途而定,比如:数据库服务器,就需要启用mysqld(或oracle) web服务器,就需要启用apache 2、 关闭不需要的tty 请编辑你的/etc/inittab 找到如下一段: 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 这段命令使init为你打开了6个控制台,分别可以用alt+f1到alt+f6进行访问 此6个控制台默认都驻留在内存中,事实上没有必要使用这么多的 你用ps auxf这个命令可以看到,是六个进程 root 3004 0.0 0.0 1892 412 tty1 Ss+ Jun29 0:00 /sbin/mingetty tty1 root 3037 0.0 0.0 2492 412 tty2 Ss+ Jun29 0:00 /sbin/mingetty tty2 root 3038 0.0 0.0 2308 412 tty3 Ss+ Jun29 0:00 /sbin/mingetty tty3 root 3051 0.0 0.0 1812 412 tty4 Ss+ Jun29 0:00 /sbin/mingetty tty4 root 3056 0.0 0.0 2116 412 tty5 Ss+ Jun29 0:00 /sbin/mingetty tty5 root 3117 0.0 0.0 2396 412 tty6 Ss+ Jun29 0:00 /sbin/mingetty tty6 3. 如何关闭这些进程? 通常我们保留前2个控制台就可以了, 把后面4个用#注释掉就可以了 然后无需重启机器,只需要执行 init q 这个命令即可 init q q作为参数的含义:重新执行/etc/inittab中的命令 修改完成后需重启机器使之生效 4 、如何关闭atime? 一个linux文件默认有3个时间: atime:对此文件的访问时间 ctime:此文件inode发生变化的时间 mtime:此文件的修改时间 如果有多个小文件时通常没有必要记录文件的访问时间, 这样可以减少磁盘的io,比如web服务器的页面上有多个小图片 如何进行设置呢? 修改文件系统的配置文件:vi /etc/fstab 在包含大量小文件的分区中使用noatime,nodiratime两项 例如: /dev/md5 /data/pics1 ext3 noatime,nodiratime 0 0 这样文件被访问时就不会再产生写磁盘的io 5、 一定要让你的服务器运行在level 3上 做法: vi /etc/inittab id:3:initdefault: 让服务器运行X是没有必要的 6, 优化sshd X11Forwarding no //不进行x图形的转发 UseDNS no //不对IP地址做反向的解析 7、 优化shell 修改命令history记录 # vi /etc/profile 找到 HISTSIZE=1000 改为 HISTSIZE=100 然后 source /etc/profile

配置超过 10000 个链接数的服务器,linux 怎样优化

基本就是open file与port range的修改。linux下一个tcp链接,本质上就是一个文件系统的open file。

进程使用文件描述符引用内核的open file。

操作系统对文件相关的限制有两个方面:1,对每一个进程的文件描述符限制,这个可以使用ulimit -n进行修改。2,操作系统对系统级的open file总量限制,这个可以使用内核参数fs.file-max进行修改。操作系统对端口的范围有限制,这个可以使用内核参数net.ipv4.ip_local_port_range进行修改。修改内核参数的方法有好多种,本质上就是修改/etc/sysctl.conf文件。

linux 下怎么优化mysql占用内存

Linux 进程通过 C 标准库中的内存分配函数 malloc 向系统申请内存,但是到真正与内核交互之间,其实还隔了一层,即内存分配管理器(memory allocator)。常见的内存分配器包括:ptmalloc(Glibc)、tcmalloc(Google)、jemalloc(FreeBSD)。

MySQL 默认使用的是 glibc 的 ptmalloc 作为内存分配器。

内存分配器采用的是内存池的管理方式,处在用户程序层和内核层之间,它响应用户的分配请求,向操作系统申请内存,然后将其返回给用户程序。 为了保持高效的分配,分配器通常会预先向操作系统申请一块内存,当用户程序申请和释放内存的时候,分配器会将这些内存管理起来,并通过一些算法策略来判断是否将其返回给操作系统。这样做的最大好处就是可以避免用户程序频繁的调用系统来进行内存分配,使用户程序在内存使用上更加高效快捷。 关于 ptmalloc 的内存分配原理,个人也不是非常了解,这里就不班门弄斧了,有兴趣的同学可以去看下华庭的《glibc 内存管理 ptmalloc 源代码分析》【文末链接】。

关于如何选择这三种内存分配器,网上资料大多都是推荐摒弃 glibc 原生的 ptmalloc,而改用 jemalloc 或者 tcmalloc 作为默认分配器。因为 ptmalloc 的主要问题其实是内存浪费、内存碎片、以及加锁导致的性能问题,而 jemalloc 与 tcmalloc 对于内存碎片、多线程处理优化的更好。 目前 jemalloc 应用于 Firefox、FaceBook 等,并且是 MariaDB、Redis、Tengine 默认推荐的内存分配器,而 tcmalloc 则应用于 WebKit、Chrome 等。


推荐阅读
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
author-avatar
欢乐乡村烤鸭8321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有