Sysctl命令及linux内核参数调整
一、Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctlconf文件来实现。
命令格式:
sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p (default /etc/sysctlconf)
sysctl [-n] [-e] –a
常用参数的意义:
-w 临时改变某个指定参数的值,如
# sysctl -w netipv4ip_forward=1
-a 显示所有的系统参数
-p从指定的文件加载系统参数,默认从/etc/sysctlconf 文件中加载,如:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# sysctl -w netipv4ip_forward=1
以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了
# service network restart
命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctlconf文件,将 netipv4ip_forward=0改为netipv4ip_forward=1
二、linux内核参数调整:linux 内核参数调整有两种方式
方法一:修改/proc下内核参数文件内容,不能使用编辑器来修改内核参数文件,理由是由于内核随时可能更改这些文件中的任意一个,另外,这些内核参数文件都是虚拟文件,实际中不存在,因此不能使用编辑器进行编辑,而是使用echo命令,然后从命令行将输出重定向至 /proc 下所选定的文件中。如:将 timeout_timewait 参数设置为30秒:
# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
参数修改后立即生效,但是重启系统后,该参数又恢复成默认值。因此,想永久更改内核参数,需要修改/etc/sysctlconf文件
方法二.修改/etc/sysctlconf文件。检查sysctlconf文件,如果已经包含需要修改的参数,则修改该参数的值,如果没有需要修改的参数,在sysctlconf文件中添加参数。如:
netipv4tcp_fin_timeout=30
保存退出后,可以重启机器使参数生效,如果想使参数马上生效,也可以执行如下命令:
# sysctl -p
三、sysctlconf 文件中参数设置及说明
proc/sys/net/core/wmem_max
最大socket写buffer,可参考的优化值:873200
/proc/sys/net/core/rmem_max
最大socket读buffer,可参考的优化值:873200
/proc/sys/net/ipv4/tcp_wmem
TCP写buffer,可参考的优化值: 8192 436600 873200
/proc/sys/net/ipv4/tcp_rmem
TCP读buffer,可参考的优化值: 32768 436600 873200
/proc/sys/net/ipv4/tcp_mem
同样有3个值,意思是:
netipv4tcp_mem[0]:低于此值,TCP没有内存压力
netipv4tcp_mem[1]:在此值下,进入内存压力阶段
netipv4tcp_mem[2]:高于此值,TCP拒绝分配socket
上述内存单位是页,而不是字节可参考的优化值是:786432 1048576 1572864
/proc/sys/net/core/netdev_max_backlog
进入包的最大设备队列默认是300,对重负载服务器而言,该值太低,可调整到1000
/proc/sys/net/core/somaxconn
listen()的默认参数,挂起请求的最大数量默认是128对繁忙的服务器,增加该值有助于网络性能可调整到256
/proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默认10K
/proc/sys/net/ipv4/tcp_max_syn_backlog
进入SYN包的最大请求队列默认1024对重负载服务器,可调整到2048
/proc/sys/net/ipv4/tcp_retries2
TCP失败重传次数,默认值15,意味着重传15次才彻底放弃可减少到5,尽早释放内核资源
/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_intvl
/proc/sys/net/ipv4/tcp_keepalive_probes
这3个参数与TCP KeepAlive有关默认值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个TCP连接在idle 2个小时后,内核才发起probe如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效对服务器而言,显然上述值太大 可调整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
/proc/sys/net/ipv4/ip_local_port_range
指定端口范围的一个配置,默认是32768 61000,已够大
netipv4tcp_syncookies = 1
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
netipv4tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
netipv4tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
netipv4tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
netipv4tcp_keepalive_time = 1200
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
netipv4ip_local_port_range = 1024 65000
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
netipv4tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
netipv4tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为 180000,改为 5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
Linux上的NAT与iptables
谈起Linux上的NAT,大多数人会跟你提到iptables。原因是因为iptables是目前在linux上实现NAT的一个非常好的接口。它通过和内核级直接 *** 作网络包,效率和稳定性都非常高。这里简单列举一些NAT相关的iptables实例命令,可能对于大多数实现有多帮助。
这里说明一下,为了节省篇幅,这里把准备工作的命令略去了,仅仅列出核心步骤命令,所以如果你单单执行这些没有实现功能的话,很可能由于准备工作没有做好。如果你对整个命令细节感兴趣的话,可以直接访问我的《如何让你的Linux网关更强大》系列文章,其中对于各个脚本有详细的说明和描述。
# 案例1:实现网关的MASQUERADE
# 具体功能:内网网卡是eth1,外网eth0,使得内网指定本服务做网关可以访问外网
EXTERNAL="eth0"
INTERNAL="eth1"
# 这一步开启ip转发支持,这是NAT实现的前提
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $EXTERNAL -j MASQUERADE
# 案例2:实现网关的简单端口映射
# 具体功能:实现外网通过访问网关的外部ip:80,可以直接达到访问私有网络内的一台主机192168110:80效果
LOCAL_EX_IP=11223344 #设定网关的外网卡ip,对于多ip情况,参考《如何让你的Linux网关更强大》系列文章
LOCAL_IN_IP=19216811 #设定网关的内网卡ip
INTERNAL="eth1" #设定内网卡
# 这一步开启ip转发支持,这是NAT实现的前提
echo 1 > /proc/sys/net/ipv4/ip_forward
# 加载需要的ip模块,下面两个是ftp相关的模块,如果有其他特殊需求,也需要加进来
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
# 这一步实现目标地址指向网关外部ip:80的访问都吧目标地址改成192168110:80
iptables -t nat -A PREROUTING -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192168110
# 这一步实现把目标地址指向192168110:80的数据包的源地址改成网关自己的本地ip,这里是19216811
iptables -t nat -A POSTROUTING -d 192168110 -p tcp --dport 80 -j SNAT --to $LOCAL_IN_IP
# 在FORWARD链上添加到192168110:80的允许,否则不能实现转发
iptables -A FORWARD -o $INTERNAL -d 192168110 -p tcp --dport 80 -j ACCEPT
# 通过上面重要的三句话之后,实现的效果是,通过网关的外网ip:80访问,全部转发到内网的192168110:80端口,实现典型的端口映射
# 特别注意,所有被转发过的数据都是源地址是网关内网ip的数据包,所以192168110上看到的所有访问都好像是网关发过来的一样,而看不到外部ip
# 一个重要的思想:数据包根据“从哪里来,回哪里去”的策略来走,所以不必担心回头数据的问题
# 现在还有一个问题,网关自己访问自己的外网ip:80,是不会被NAT到192168110的,这不是一个严重的问题,但让人很不爽,解决的方法如下:
iptables -t nat -A OUTPUT -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192168110
获取系统中的NAT信息和诊断错误
了解/proc目录的意义
在Linux系统中,/proc是一个特殊的目录,proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它包含当前系统的一些参数(variables)和状态(status)情况。它以文件系统的方式为访问系统内核数据的 *** 作提供接口
通过/proc可以了解到系统当前的一些重要信息,包括磁盘使用情况,内存使用状况,硬件信息,网络使用情况等等,很多系统监控工具(如HotSaNIC)都通过/proc目录获取系统数据。
另一方面通过直接 *** 作/proc中的参数可以实现系统内核参数的调节,比如是否允许ip转发,syn-cookie是否打开,tcp超时时间等。
获得参数的方式:
第一种:cat /proc/xxx/xxx,如 cat /proc/sys/net/ipv4/conf/all/rp_filter
第二种:sysctl >
改变参数的方式:
第一种:echo value > /proc/xxx/xxx,如 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
第二种:sysctl [-w] variable=value,如 sysctl [-w] netipv4confallrp_filter=1
以上设定系统参数的方式只对当前系统有效,重起系统就没了,想要保存下来,需要写入/etc/sysctlconf文件中
通过执行 man 5 proc可以获得一些关于proc目录的介绍
查看系统中的NAT情况
和NAT相关的系统变量
/proc/slabinfo:内核缓存使用情况统计信息(Kernel slab allocator statistics)
/proc/sys/net/ipv4/ip_conntrack_max:系统支持的最大ipv4连接数,默认65536(事实上这也是理论最大值)
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 已建立的tcp连接的超时时间,默认432000,也就是5天
和NAT相关的状态值
/proc/net/ip_conntrack:当前的前被跟踪的连接状况,nat翻译表就在这里体现(对于一个网关为主要功能的Linux主机,里面大部分信息是NAT翻译表)
/proc/sys/net/ipv4/ip_local_port_range:本地开放端口范围,这个范围同样会间接限制NAT表规模
# 1 查看当前系统支持的最大连接数
cat /proc/sys/net/ipv4/ip_conntrack_max
# 值:默认65536,同时这个值和你的内存大小有关,如果内存128M,这个值最大8192,1G以上内存这个值都是默认65536
# 影响:这个值决定了你作为NAT网关的工作能力上限,所有局域网内通过这台网关对外的连接都将占用一个连接,如果这个值太低,将会影响吞吐量
# 2 查看tcp连接超时时间
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
# 值:默认432000(秒),也就是5天
# 影响:这个值过大将导致一些可能已经不用的连接常驻于内存中,占用大量链接资源,从而可能导致NAT ip_conntrack: table full的问题
# 建议:对于NAT负载相对本机的 NAT表大小很紧张的时候,可能需要考虑缩小这个值,以尽早清除连接,保证有可用的连接资源;如果不紧张,不必修改
# 3 查看NAT表使用情况(判断NAT表资源是否紧张)
# 执行下面的命令可以查看你的网关中NAT表情况
cat /proc/net/ip_conntrack
# 4 查看本地开放端口的范围
cat /proc/sys/net/ipv4/ip_local_port_range
# 返回两个值,最小值和最大值
# 下面的命令帮你明确一下NAT表的规模
wc -l /proc/net/ip_conntrack
#或者
grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print $1 ',' $2;}'
# 下面的命令帮你明确可用的NAT表项,如果这个值比较大,那就说明NAT表资源不紧张
grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print $1 ',' $3;}'
# 下面的命令帮你统计NAT表中占用端口最多的几个ip,很有可能这些家伙再做一些bt的事情,嗯bt的事情:-)
cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10
# 上面这个命令有点瑕疵cut -d' ' -f10会因为命令输出有些行缺项而造成统计偏差,下面给出一个正确的写法:
cat /proc/net/ip_conntrack | perl -pe s/^\(\)src/src/g | cut -d ' ' -f1 | cut -d '=' -f2 | sort | uniq -c | sort -nr | head -n 10
>使用BAT下载Linux,可以先去官网下载相应的Linux安装文件,比如Ubuntu、CentOS等,然后使用BT下载工具将文件下载到本地。也可以进行网络安装,即使用BAT将远程安装ISO文件下载到本地,并使用CD或USB安装到本地硬盘上。
博主最近在研究服务器运维,由于Linux服务器相对比较困难,所以博主对她情有独钟。而window服务器几乎跟我们平常使用的电脑一样,相对简单感觉索然无味。下面正式进入主题教大家linux如何挂载硬盘。首先解答一个新手朋友都会问的问题,而且这些问题在百度上面好像找不到很合适的答案。
Linux服务器要挂载硬盘原因是什么?不挂载磁盘可以吗?
Linux服务器要挂载硬盘的原因主要有以下几点:
1、Linux服务器在默认情况下,所有的东西都是装在系统盘。系统盘的空间有限,如果站点和数据较多很容易把空间撑满,导致环境和数据库等等服务启动不了。
2、Linux服务器挂载磁盘可以避免因为系统损坏导致网站数据丢失。
3、Linux服务器挂载硬盘可以更合理的使用储存资源,因为不挂载默认所有东西装系统盘(类似电脑的c盘),导致其他数据盘闲置。比如你有200G的硬盘:系统盘20G、数据盘180G,如果不挂载硬盘那么只能用20G的系统盘,另外180G的数据盘无法使用,造成空间的巨大浪费。
了解具体原因请看另外一篇文章:Linux服务器为什么要挂载硬盘?
下面如何来挂载Linux服务器的硬盘教程开始:
挂载硬盘(磁盘)的方法博主收集了两种,全部介绍给大家。
第一种方法:使用工具自动挂载硬盘(博主强烈推荐使用这种方法,简单又不会出错)两分钟可以搞定。
使用磁盘自动挂载工具,支持Centos、Ubuntu、Debian、Fedora。
注意: 请在安装面板之前挂载磁盘,否则程序将直接跳过挂载过程。
Centos/Fedora:
yum install wget -y && wget -O auto_disksh >使用远程工具安装即可安装。
1、安装SSH远程工具连接至Linux服务器。
2、使用xshell工具连接至Linux服务器。
3、根据系统版本选择安装命令。
4、复制好后进入xshell工具,根据提示输入y,回车确认安装即可。
安装要求:
内存:512M以上,推荐768M以上(纯面板约占系统60M内存)
硬盘:100M以上可用硬盘空间(纯面板约占20M磁盘空间)
系统:CentOS 71+ (Ubuntu1604+、Debian90+),确保是干净的 *** 作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL(已有环境不可安装)
宝塔linux60版本是基于centos7开发的,务必使用centos7x 系统
提示:Centos官方已宣布在2020年停止对Centos6的维护更新,各大软件开发商也逐渐停止对Centos6的兼容,新服务器不建议使用Centos6
系统要求
*** 作系统:全新系统(支持CentOS、Ubuntu、Debian、Fedora、Deepin),
确保是干净的 *** 作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL
宝塔Linux60版本是基于centos7开发的,强烈建议使用centos7x 系统
内存要求:内存要求最低512MB,推荐768MB以上,纯面板约占系统60MB内存
Linux系统:一键挂载磁盘工具
Centos/Fedora:yum install wget -y && wget -O auto_disksh >
说明:
1:本工具默认将数据盘挂载到/>
2:若您的服务器之前安装过Windows系统,需要手动删除NTFS分区,挂载工具会直接跳过NTFS分区
3:若您的磁盘已分区,且未挂载,工具会自动将分区挂载到/>
4:若您的磁盘是新磁盘,工具会自动分区并格式化成ext4文件系统
5:本工具只自动挂载一个分区,若您有多快数据盘,请手动挂载未被自动挂载的磁盘
6:此脚本只适用于新磁盘挂载,若数据盘已有数据请勿使用此脚本
安装方法
使用 SSH 连接工具,如宝塔远程桌面助手连接到您的 Linux 服务器后,挂载磁盘,根据系统执行相应命令开始安装(大约2分钟完成面板安装):
Centos安装脚本:yum install -y wget && wget -O installsh >
一、使用远程连接工具连接服务器
1如宝塔远程桌面助手,在宝塔远程桌面助手选择linux服务器选项,其他都默认,输入IP跟密码连接。如果是首次连接会有d窗出现,点击是即可。
服务器系统建议为:CentOS70以上 64位 系统
(PS:56云服务器,在控制台的云服务器中可查看公网IP地址)
注:如果输入的密码不对,会提示(root@160194820's password:),重新输入正确的密码即可
链接成功如下图
二、安装宝塔面板
1输入以下命令,然后回车。
2确认是否要安装宝塔,输入y 回车等待安装完即可。如下图
3大概等待需要20分钟左右,安装完成后,会出现面板地址及默认账号与密码。访问>
2,登录宝塔面板
安装完成宝塔面板后,我们就可以在浏览器中访问了。复制Bt-panel中的URL到浏览器上访问。
3,设置宝塔面板
登陆后进入宝塔面板我们可以看到如下图所示,你可以选择LNMP或者LAMP进行安装。看大家网站需要什么环境进行选择。如果是生产环境推荐大家使用编译安装,如果只是测试环境选择极速安装。两者的区别是编译安装慢但稳定,极速安装虽然慢但是没编译安装稳定。
Linux下宝塔btcn,lnmp,phpstudy都不错,宝塔有web管理界面,Windows下宝塔,phpstudy都有管理界面容易上手,主要看你使用环境和针对网站的语言了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)