Linux系统运维

内核参数

tcp_max_tw_buckets

TIME_WAIT套接字的最大数量。这个参数52w太大了,导致同样的业务流量下,机器负载明现偏高

# 查看方式
sysctl -a | grep "tcp_max"
cat /proc/sys/net/ipv4/tcp_max_tw_buckets

# 值
net.ipv4.tcp_max_tw_buckets = 524288
net.ipv4.tcp_max_tw_buckets = 16384

TIME_WAIT:  解决Linux TIME_WAIT过多造成的问题_zhangjunli的博客-CSDN博客_time_wait连接过多的原因

sysctl -w net.ipv4.tcp_tw_timeout=30

txqueuelen

# 设置
ifconfig eth1 txqueuelen 10000
echo "ifconfig eth1 txqueuelen 10000" >> /etc/rc.d/rc.local

somaxconn

tcp的accept队列长度=min(somaxconn, backlog)

# 查看方式
sysctl -a | grep "net.core.somaxconn"
cat /proc/sys/net/core/somaxconn

# 设置
echo 4096 > /proc/sys/net/core/somaxconn
在/etc/sysctl.conf中添加: net.core.somaxconn = 4096

ping_group_range

# 查看
cat /proc/sys/net/ipv4/ping_group_range
# 设置
sysctl -w net.ipv4.ping_group_range="0   2147483647"

接收/发送套接字缓冲区大小

echo 8388608 > /proc/sys/net/core/rmem_max
echo 8388608 > /proc/sys/net/core/wmem_max
echo 8388608 > /proc/sys/net/core/rmem_default
echo 8388608 > /proc/sys/net/core/wmem_default

# /etc/sysctl.conf  将以下内容添加至此文件,否则重启后将丢失。
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608

说明:该参数的默认大小为:229376,偏小。业务测试发现 udp会有receive buffer errors(查看命令 watch -n 1 -d 'netstat -us' )

普通用户使用1024以内端口

# 这个值内核默认是1024,手动改为0
# echo 0 > /proc/sys/net/ipv4/ip_unprivileged_port_start
# 
# 查看
# cat /proc/sys/net/ipv4/ip_unprivileged_port_start
# 或 sysctl -a | grep net.ipv4.ip_unprivileged_port_start

net.ipv4.neigh.default.gc_thresh3

问题现象:

(1)本地访问listen端口,报错 curl: (7) Failed connect to {ip}:{port}; Connection timed out

(2)ping 127.0.0.1,报错 ping: sendmsg: Invalid argument

(3)内核报错 kernel: neighbour: arp_cache: neighbor table overflow!

原因:arp表满导致丢包。参考文章:网络丢包问题,敢不敢这样定位?_eth_网卡_数据

# 查看arp条目数
# arp | wc -l
1048

# 查看arp缓存条目数的限制。gc_thresh3
# sysctl -a |grep net.ipv4.neigh.default.gc_thresh
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 2048

# 调大gc_thresh3
# echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
# 或者 sysctl -w net.ipv4.neigh.default.gc_thresh3=2048

命令

1. 查看登录用户

cat /var/log/secure | grep Accept

设置hostname

echo "kernel.hostname = hostname_temp_test" >> /etc/sysctl.d/hostname.conf
sysctl -p /etc/sysctl.d/hostname.conf

sed -i "1s/$/ hostname_temp_test/" /etc/hosts
echo "NETWORKING=yes" >> /etc/sysconfig/network

2. 统计目录下文件行数

Reference: Linux统计目录下文件个数及代码行数 - 科学家会武术 - 博客园

# 统计目录下所有文件行数
find . -type f | xargs cat | wc -l

# 统计目录下所有C代码行数
find ./ -name "*.c" | xargs cat | grep -v ^$ | wc -l

# 查看目录下各C代码文件行数
for i in `find ./ -name "*.c"`; do cat | wc -l $i; done;

3. iptables

# 多个端口
iptables -I ETH1_TCP -p tcp -m multiport --dports 8848,8849 -s 0.0.0.0/0 -j ACCEPT

4. curl

# 忽略证书
curl -k

# -H "Host:xxx"
curl -v -H "Host:www.baidu.com" "http://0.0.0.0/hls/10086_666.m3u8"


curl -v https://yun.playauth.live.qcloud.com/fdsaaa?abcccc
tcpdump -i eth1 -n -A  port 8848 | fgrep abccc

5. nc验端口

# 监听端口
nc -ul port
# 连接
nc -u ip  port 
# 然后互发数据测试下

6. cpu

查看cpu型号

dmidecode -t processor

Reference:

# 物理CPU个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
# 单个CPU的核数
cat /proc/cpuinfo | grep "cpu cores"| uniq
# 逻辑CPU个数
cat /proc/cpuinfo |grep "processor" | wc -l
grep -c processor /proc/cpuinfo

# CPU配置
lscpu
# 核心数
cat /proc/cpuinfo |grep processor |wc -l
# 是否KVM
lscpu | grep -i kvm
或 cat /sys/devices/system/clocksource/clocksource0/available_clocksource | grep -i kvm

turbo

# grep . /sys/devices/system/cpu/cpufreq/boost
1
# grep . /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
performance
# grep . /sys/devices/system/cpu/cpufreq/policy0/scaling_*_freq
/sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq:3100044
/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq:2601000
/sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq:1000000

7. top

free、vmstat
iostat、iotop
perf
Linux性能分析工具: 
https://blog.csdn.net/tiantangyouzui/article/details/72231590
https://www.open-open.com/lib/view/open1434589043973.html

8. 查看D进程堆栈

for i in `ps -AT -o stat,tid |grep '^[D]' |awk '{print $2}'`;do cat /proc/$i/comm;cat /proc/$i/stat |awk '{print $3}';cat /proc/$i/stack;cat /proc/$i/cgroup|grep net ;echo $i;done

======

# node上查看容器内的进程列表
docker ps | grep 【podId】  # 得到容器id 
docker top 【containerId】

# node上查看容器内的cgroup配置
cat /proc/【pid】/cgroup    # 得到cgroup信息
cat /sys/fs/cgroup/cpuset/kubepods/【cgroup信息】/cpuset.cpus  # 查看被cpuset

# 进程的cpu亲和性
taskset -cp 【pid】       # 查看配置
taskset -cp 0-79 116516  # 修改配置
ps -eo pid,ppid,comm,args,psr | grep bench_pat_mc  # 查看进程正在哪个cpu上运行psr
pidstat -t 2 -p 【pid】  # 持续显示指定进程的相关信息

=== ===

cgroup v1 v2

cgroup V1和V2的原理和区别-阿里云开发者社区

# cgroup挂载
# mount -t cgroup2 none /cgroups/v2
# mount -t cgroup cpuset -ocpuset /cgroups/cpuset

# cat /proc/mounts | grep cgroup
none /cgroups/v2 cgroup2 rw,relatime 0 0
cpuset /cgroups/cpuset cgroup rw,relatime,cpuset 0 0

8. 网卡

Reference:

Linux TCP队列相关参数的总结 Linux TCP队列相关参数的总结 - zengkefu - 博客园

[译] Linux 网络栈监控和调优:接收数据(2016)[译] Linux 网络栈监控和调优:接收数据(2016)

Monitoring and Tuning the Linux Networking Stack: Receiving Data | Packagecloud Blog

ethtool eth0

# QDisc(queueing discipline)
# 设置大小
ifconfig eth1 txqueuelen 10000
echo "ifconfig eth1 txqueuelen 10000" >> /etc/rc.d/rc.local
# 查看丢包
tc -s qdisc show
执行结果: 
qdisc mq 0: dev eth1 root 
 Sent 7857971645 bytes 47398281 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0 

网卡多队列

# 查看
ethtool -l eth0     # 执行结果中的 Combined 字段
# 设置
ethtool -L eth0 combined 16     # 设置eth0当前使用16个队列

/proc目录下有2个与中断子系统相关的文件和子目录:文件/proc/interrupts、子目录/proc/irq

/proc/interrupts文件,会依次显示:irq编号,每个cpu对该irq的处理次数,中断控制器的名字,irq的名字,驱动程序注册该irq时使用的名字

/proc/irq目录,会为每个注册的irq创建一个以irq编号为名字的子目录,每个子目录可能包含:

  • smp_affinity        irq和cpu之间的亲缘绑定关系
  • smp_affinity_hint   只读条目,用于用户空间做irq平衡
  • spurious            可获得该irq被处理和未被处理的次数的统计信息
  • handler_name        驱动程序注册该irq时传入的处理程序的名字

Reference: 中断子系统的proc文件接口_yiyeguzhou100的专栏-CSDN博客

9. 系统启动相关

# 启动时的相关配置
chkconfig --list | grep 3:on
# 重启记录
last | grep reboot

qdisc

kmalloc/vmalloc/malloc

slab/slub/slob

Reference: linux 内核 内存管理 slub算法 (一) 原理_卢坤的专栏-CSDN博客_buddy

工具

rsync

RSYNC_PASSWORD='pass123' 
rsync -raqz --update package@10.10.10.10::new_os/Init_Script/ral_client_2.tgz /tmp &>/dev/null

&&tar -zxvf /tmp/ral_client_2.tgz -C /tmp/ &>/dev/null
&&/tmp/ral_client_2/install.sh >/dev/null 2>&1
&&cat /tmp/ral_client_2/install.tag

python

# MySQL-python安装
yum install python-devel
pip install MySQL-python

nginx

nginx安装:https://my.oschina.net/yueshengwujie/blog/3099219

# 查看域名证书有效期
curl -v https://baidu.com
echo | openssl s_client -servername baidu.com -connect baidu.com:443 2>/dev/null | openssl x509 -noout -dates

# 加载配置文件
nginx -s reload

# conf文件
server {
    listen 443 ssl;
    server_name config.liveget.qcloud.com localhost;

    # crt file path
    ssl_certificate /usr/local/cert/baidu.com.crt;
    ssl_certificate_key /usr/local/cert/baidu.com.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;

    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8847;
}

samba

# /etc/samba/smb.conf
# systemctl start smb
[devcloud_samba]
        comment = win10_20191002
        path = /data
        browseable = yes
        guest ok = no
        writable = yes
        valid users = root

perf

数据采集
perf通过采样的方式,记录CPU正在执行的函数名及函数的调用栈,通常采样频率是每秒99次,perf的数据采集有额外性能开销,所以不宜长时间使用。

perf record -F 99 -p 13204 -g -- sleep 30
# record 表示记录cpu的执行数据
# -F:采样频率(次/秒)
# -p:进程号
# -g:输出调用栈数据
# -- sleep:本次采样总时长(秒)

观察进程内各个函数的CPU使用情况:perf top -p <pid>
同时显示函数调用链:perf top -g -p <pid>
记录采样结果,以供后续分析,加上-g会记录调用链:perf record -g -p <pid>

perf record -C 0,1,2 只对这些cpu资源进行监控

读取采样结果
perf report



./perf_4.14 record -a -g -p 124751 -- sleep 10
./perf_4.14 report > a
vim a

openmpi

MPI 教程介绍 MPI 教程介绍 · MPI Tutorial

make && make install
openmpi-2.1.6/build/bin/mpirun -np 4 --allow-run-as-root sh test.sh

代码:
cd opal/mca/hwloc/hwloc1112/hwloc/src/
bind.c
topology-linux.c

// FILE: bind.c
hwloc_set_cpubind()
topology->binding_hooks.set_thisproc_cpubind(topology, set, flags)

// FILE: topology-linux.c
line 1512 hooks->set_thisproc_cpubind = hwloc_linux_set_thisproc_cpubind;
line 760 hwloc_linux_set_thisproc_cpubind()
line 672 hwloc_linux_set_pid_cpubind()
line 585 hwloc_linux_set_pid_cpubind()
cb(topology, tids[i], data, i);

函数指针 cb为 hwloc_linux_foreach_proc_tid_set_cpubind_cb()
line 305 hwloc_linux_set_tid_cpubind()
// 亲和性设置
last = hwloc_bitmap_last(hwloc_set);
sched_setaffinity(tid, setsize, plinux_set);

onnxruntime

strace

LD_LIBRARY_PATH=/onnxruntime-linux-x64-1.5.1/lib/ strace -o temp.log python3 /mmspe/tools/det_pytorch2onnx.py config.json --checkpoint checkpoint.pth --output-file model.onnx --simplify --dynamic-export

域名解析

# 解析测试工具
http://q.talebook.org/mdig/
curl -v "http://119.29.29.29/d?dn=baidu.com&ip=14.22.7.24"
dig @119.29.29.29 baidu.com

# 公共DNS
114.114.114.114  8.8.8.8  119.29.29.29

# dns出口
for i in {1..30}; do dig +short $i.ip.dnspod.net; done | sort -u

# 出口ip
curl cip.cc

lib库

/opt/compiler/gcc-4.8.2/sbin/patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 ./bin/halolet

/opt/compiler/gcc-4.8.2/sbin/patchelf --set-interpreter ${LOCAL}/lib64/ld-linux-x86-64.so.2 ${LOCAL}/bin/matrix-cli

if [ -f /usr/lib64/libnvidia-ml.so ];then
    export LD_PRELOAD=/usr/lib64/libnvidia-ml.so
fi

设备号

# ls -alh /dev/nvidiactl
crw-rw-rw- 1 root root 195, 255 Nov  8 17:01 /dev/nvidiactl

# python
>>> import os
>>> dev_id = os.stat('/dev/nvidiactl').st_rdev
>>> print(os.major(dev_id), os.minor(dev_id))
(195, 255)

LD_PRELOAD、gpu、nvidia

export LD_PRELOAD="/usr/lib64/libnvidia-ml.so"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux系统运维指南是一本关于Linux操作系统运维的指南资料。这本PDF文件提供了Linux系统运维的基本知识、原则和技术,适合初学者和有一定基础的运维人员学习使用。 首先,这本指南包含了Linux系统基础知识的介绍,如Linux的历史、核心概念和基本组件等。它还介绍了Linux系统的安装和配置方法,涵盖了系统的硬件要求、分区和文件系统的设置,以及系统的基本配置和网络设置等。 其次,指南还包含了Linux系统的管理和维护方面的知识。它详细介绍了用户和用户组的管理、文件和目录的权限设置,以及进程的管理和监控等。此外,它还介绍了软件包的安装和更新,系统备份和恢复,以及系统性能优化和故障排除等。 此外,这本指南还介绍了Linux系统的安全性和网络方面的知识。它涵盖了防火墙的配置、用户认证和访问控制的设置,以及网络服务的设置和管理等。此外,它还介绍了基本的网络故障排除和安全漏洞的修复方法。 最后,这本指南还提供了一些实用的技巧和工具,帮助运维人员更高效地管理和维护Linux系统。它包含了一些常用命令和常见问题的解决办法,还介绍了一些实用的工具和脚本,用于自动化和简化运维任务。 总之,Linux系统运维指南PDF是一本全面而实用的资料,涵盖了Linux系统运维的各个方面。它适合于初学者和有一定基础的运维人员学习和参考,帮助他们更好地理解和掌握Linux系统的管理和维护技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值