设为首页 收藏本站
查看: 1328|回复: 0

[经验分享] linux内核

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2019-2-17 08:35:17 | 显示全部楼层 |阅读模式
1. 常见内核参数


  •   内核参数一般在/proc/sys 目录中

    • 临时改变某个系统参数的值,可以用两种方法来实现,如
      1) echo 1 > /proc/sys/net/ipv4/ip_forward
      2) sysctl -w net.ipv4.ip_forward=1
    以上两种方法都可能立即开启路由转发功能,但如果系统重启,或者重启网络所设置的值即会丢失,


    • 永久保留配置,可以修改/etc/sysctl.conf文件
      net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1
    • sysctl命令的作用           
      -w 用此选项来改变一个sysctl设置      sysctl -w net.ipv4.ip_forward=1      
      -p   载入sysctl配置文件            -p后未指定路径,则载入 /etc/sysctl.conf


  •   常用参数(0表示关闭,1表示开启)

    • net.ipv4.tcp_syncookies = 1     默认1
      是否打开SYN Cookie功能,该功能可以防止部分SYN***
    • net.ipv4.ip_local_port_range= 1024 65535   默认32768   60999
      可用端口的范围    修改成1024 65535 可提高并发连接数量
    • net.ipv4.tcp_fin_timeout =30   默认60
      tcp超时时间
    • net.ipv4.tcp_timestamps = 1  默认1
      TCP时间戳   服务器开启,客户端可关闭
    • net.ipv4.tcp_tw_recycle = 0  默认0
      快速回收处于TIME_WAIT状态的socket,建议关闭
    • net.ipv4.tcp_tw_reuse = 1  默认0
      针对TIME-WAIT,做为客户端可以启用
    • net.ipv4.tcp_max_tw_buckets = 262144   默认262144
      针对TIME-WAIT,配置其上限
    • net.ipv4.tcp_max_orphans = 3276800  默认16384
      orphans的最大值
    • net.ipv4.tcp_max_syn_backlog = 819200   默认128
      增大SYN队列的长度,容纳更多连接
    • net.ipv4.tcp_keepalive_intvl = 30   默认75
      探测失败后,间隔几秒后重新探测
    • net.ipv4.tcp_keepalive_probes = 3 默认9
      探测失败后,最多尝试探测几次
    •   net.ipv4.tcp_keepalive_time = 1200  默认7200
      间隔多久发送1次keepalive探测包

    • net.netfilter.nf_conntrack_tcp_timeout_established = 600     默认432000
      设置 conntrack tcp 状态的超时时间,如果系统出现下述异常时要考虑调整:ping: sendmsg: Operation not permitted
      kernel: nf_conntrack: table full, dropping packet.
    • net.netfilter.nf_conntrack_max = 655350    默认65535
      设置 conntrack 的上限,如果系统出现下述异常时要考虑调整:
      ping: sendmsg: Operation not permitted
      kernel: nf_conntrack: table full, dropping packet.
    • net.core.netdev_max_backlog = 500000 默认1000
      网卡设备将请求放入队列的长度
    • net.core.somaxconn = 65536  默认128
      已经成功建立连接的套接字将要进入队列的长度
    • net.core.rmem_default = 8388608    默认值:212992
      默认的TCP数据接收窗口大小(字节)
    • net.core.wmem_default = 8388608  默认值:212992
      默认的TCP数据发送窗口大小(字节)
    • net.core.rmem_max = 16777216 默认值:212992
      最大的TCP数据接收窗口大小(字节)
    • net.core.wmem_max = 16777216   默认值:212992
      最大的TCP数据发送窗口大小(字节)
    • net.ipv4.tcp_mem = 94500000   915000000   927000000    默认值:94389   125854  188778
      内存使用的下限  警戒值  上限
    • net.ipv4.tcp_rmem = 4096   87380   16777216   默认值:4096    87380   6291456
      socket接收缓冲区内存使用的下限  警戒值  上限
    • net.ipv4.tcp_wmem = 4096   16384   16777216    默认值:4096    16384   4194304
      socket发送缓冲区内存使用的下限  警戒值  上限
    • net.ipv4.tcp_thin_dupack = 1      默认值:0
      收到dupACK时要去检查tcp stream是不是 thin ( less than 4 packets in flight)
    • net.ipv4.tcp_thin_linear_timeouts = 1   默认值:0
      重传超时后要去检查tcp stream是不是 thin ( less than 4 packets in flight)
    • net.unix.max_dgram_qlen = 30000    默认值:10
      UDP队列里数据报的最大个数
    • kernel.randomize_va_space = 1    默认值:2
      内核的随机地址保护模式
    • kernel.panic = 1    默认值:0
      内核panic时,1秒后自动重启
    • kernel.corepattern = core%e    默认值:|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e
      程序生成core时的文件名格式
    • kernel.sysrq = 0    默认值:0
      是否启用sysrq功能
    • vm.min_free_kbytes=901120  默认值:8039
      保留内存的最低值
    • vm.panic_on_oom=1    默认值:0
      发生oom时,自动转换为panic
    • vm.min_free_kbytes=1048576   默认值:45056
      保留最低可用内存
    • vm.swappiness=20    默认值:60
      数值(0-100)越高,越可能发生swap交换
    • fs.inotify.max_user_watches=8192000     默认值:8192
      inotify的watch数量
    • fs.aio-max-nr=1048576   默认值:65536
      aio最大值
    • fs.file-max = 1048575    默认值:98529
      文件描述符的最大值


  (针对lvs,关闭网卡LRO/GRO功能      
ethtool -k eth0 查看LRO/GRO当前是否打开
ethtool -K eth0 lro off 关闭GRO
ethtool -K eth0 gro off 关闭GRO)

2.通过/proc查看top的进程状态
  进程运行时会生成目录/proc/PID,里面记录进程详细状态,每个进程生成一个以pid为名的文件夹
[root@centos7 sudoers.d]#ll /proc/1
total 0
dr-xr-xr-x 2 root root 0 Dec 25 18:37 attr
-rw-r--r-- 1 root root 0 Dec 25 18:37 autogroup
-r-------- 1 root root 0 Dec 25 18:37 auxv
-r--r--r-- 1 root root 0 Dec 17 22:17 cgroup
--w------- 1 root root 0 Dec 25 18:37 clear_refs
-r--r--r-- 1 root root 0 Dec 17 22:17 cmdline
-rw-r--r-- 1 root root 0 Dec 17 22:17 comm
-rw-r--r-- 1 root root 0 Dec 25 18:37 coredump_filter
-r--r--r-- 1 root root 0 Dec 25 18:37 cpuset
lrwxrwxrwx 1 root root 0 Dec 25 18:37 cwd -> /
-r-------- 1 root root 0 Dec 17 22:17 environ
lrwxrwxrwx 1 root root 0 Dec 17 22:17 exe -> /usr/lib/systemd/systemd
dr-x------ 2 root root 0 Dec 25 18:37 fd
dr-x------ 2 root root 0 Dec 25 18:37 fdinfo
-rw-r--r-- 1 root root 0 Dec 25 18:37 gid_map
-r-------- 1 root root 0 Dec 25 18:37 io
-r--r--r-- 1 root root 0 Dec 25 18:37 limits
-rw-r--r-- 1 root root 0 Dec 17 22:17 loginuid
dr-x------ 2 root root 0 Dec 25 18:37 map_files
-r--r--r-- 1 root root 0 Dec 25 18:37 maps
-rw------- 1 root root 0 Dec 25 18:37 mem
-r--r--r-- 1 root root 0 Dec 15 15:54 mountinfo
-r--r--r-- 1 root root 0 Dec 25 18:37 mounts
-r-------- 1 root root 0 Dec 25 18:37 mountstats
dr-xr-xr-x 6 root root 0 Dec 25 18:37 net
dr-x--x--x 2 root root 0 Dec 25 18:37 ns
-r--r--r-- 1 root root 0 Dec 25 18:37 numa_maps
-rw-r--r-- 1 root root 0 Dec 25 18:37 oom_adj
-r--r--r-- 1 root root 0 Dec 25 18:37 oom_score
-rw-r--r-- 1 root root 0 Dec 24 18:58 oom_score_adj
-r--r--r-- 1 root root 0 Dec 25 18:37 pagemap
-r--r--r-- 1 root root 0 Dec 25 18:37 personality
-rw-r--r-- 1 root root 0 Dec 25 18:37 projid_map
lrwxrwxrwx 1 root root 0 Dec 17 22:18 root -> /
-rw-r--r-- 1 root root 0 Dec 25 18:37 sched
-r--r--r-- 1 root root 0 Dec 25 18:37 schedstat
-r--r--r-- 1 root root 0 Dec 17 22:17 sessionid
-rw-r--r-- 1 root root 0 Dec 25 18:37 setgroups
-r--r--r-- 1 root root 0 Dec 25 18:37 smaps
-r--r--r-- 1 root root 0 Dec 25 18:37 stack
-r--r--r-- 1 root root 0 Dec 17 22:17 stat
-r--r--r-- 1 root root 0 Dec 21 17:15 statm
-r--r--r-- 1 root root 0 Dec 17 22:17 status
-r--r--r-- 1 root root 0 Dec 25 18:37 syscall
dr-xr-xr-x 3 root root 0 Dec 25 18:37 task
-r--r--r-- 1 root root 0 Dec 25 18:37 timers
-rw-r--r-- 1 root root 0 Dec 25 18:37 uid_map
-r--r--r-- 1 root root 0 Dec 25 18:37 wchan
  查看里面status文件会得到进程相关信息(与top类似)
[root@centos7 sudoers.d]#cat /proc/1/status
Name:   systemd
Umask:  0000
State:  S (sleeping)
Tgid:   1
Ngid:   0
Pid:    1
PPid:   0
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 128
Groups:
VmPeak:   256496 kB
VmSize:   191224 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:      4208 kB
VmRSS:      3152 kB
RssAnon:            1524 kB
RssFile:            1628 kB
RssShmem:              0 kB
VmData:   148928 kB
VmStk:       132 kB
VmExe:      1320 kB
VmLib:      3716 kB
VmPTE:       116 kB
VmSwap:      124 kB
Threads:        1
SigQ:   1/4607
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 7be3c0fe28014a03
SigIgn: 0000000000001000
SigCgt: 00000001800004ec
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
Seccomp:        0
Cpus_allowed:   ffffffff,ffffffff
Cpus_allowed_list:      0-63
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        50397
nonvoluntary_ctxt_switches:     3733

3. 分别用for和while 实现网段网址搜寻
  实现192.168.0.0/24网段搜寻:
#!/bin/bash
for ip in {1..254} ;do
{
ping -c1 -w 1 192.168.0.$ip &>/dev/null && echo "192.168.0.$ip is success" ;
}&
done
wait
  执行结果
[root@centos7 ~]#bash ip_for.sh                             
192.168.0.1 is success
192.168.0.109 is success
192.168.0.108 is success

#!/bin/bash
declare -i ip=1
while [ $ip -le 254 ] ; do
{
ping -c1 -w 1 192.168.0.$ip &>/dev/null && echo "192.168.0.$ip is success" ;
}&
let ip++
done
wait
  执行结果
[root@centos7 ~]#bash ip_while.sh
192.168.0.1 is success
192.168.0.109 is success
192.168.0.108 is success
  用{  }& wait   实现并发执行提高效率

4.initrd作用
  initrd 是boot loader initialized RAM disk,一般是压缩过的。它存在的主要目的是在内核启动时加载它,安装其中的驱动,挂载系统的根
  解压系统boot/文件下的initramfs-3.10.0-693.el7.x86_64.img文件
重命名为.gz文件
gunzip initramfs-3.10.0-693.el7.x86_64.gz
cpio -id < initramfs-3.10.0-693.el7.x86_64
查看解压后文件
bin  etc   initramfs-3.10.0-693.el7.x86_64  lib64  root  sbin      sys      tmp  var
dev  init  lib    proc   run   shutdown  sysroot  usr
  从文件可以看出里面内容很类似一个linux系统文件夹,initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起, 并作为内核引导过程的一部分进行加载。内核然后会将这个initrd文件作为其阶段引导过程的一部分来加载模块,这样才能在以后的引导过程中使用真正的文 件系统,并挂载实际的根文件系统。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-673401-1-1.html 上篇帖子: Linux分区方案 下篇帖子: Linux之bash特性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表