linux-基本操作

nginx默认http代理用的是 HTTP/1.0版本

linux命令大全网址

开发者中文文档大全(有java8, spring全家桶, mysql, nginx, Hive, HBase等等)


网络优化 配置文件 /etc/sysctl.conf

查看所有系统配置 sysctl -a

sysctl -w net.core.somaxconn=1024

sysctl -w net.inet.tcp_syncookies=1

sysctl -w net.ipv4.tcp_fin_timeout=30

sysctl -w net.ipv4.tcp_tw_reuse=1

sysctl -w net.ipv4.tcp_tw_recycle=0

sysctl -w net.ipv4.tcp_synack_retries=2

    防止一个套接字在有过多试图链接导致网络过载. 
    SYN cookies是一种用于通过选择加密的初始化TCP序列号,可以对回应的包做验证来降低SYN'洪水'攻击的影响的技术。 
    syn cookies在一定程度上能缓解"syn flood attack",建议生产系统中开启该选项
    sysctl -w net.inet.tcp_syncookies=1
    
    该参数决定保持在FIN-WAIT-2状态的时间
    sysctl -w net.ipv4.tcp_fin_timeout=30
    
    允许对新连接重用TIME-WAIT sockets
    sysctl -w net.ipv4.tcp_tw_reuse=1 
    
    指定当接收到SYN请求时,会进行多少次SYN ACK重传(retransmit),该值默认是5,每次重传大约花费30-40s,意味着默认情况下被动(passive) TCP连接握手最大会花费180s
    sysctl -w net.ipv4.tcp_synack_retries=2
    
    禁用回收
    sysctl -w net.ipv4.tcp_tw_recycle=0
    
    表示socket监听(listen)的backlog上限(默认128) 
    sysctl -w net.core.somaxconn=1024

阿里云配置 (点我另存为下载) sysctl.conf.

    vm.swappiness = 0
    net.ipv4.neigh.default.gc_stale_time=120
    
    # see details in https://help.aliyun.com/knowledge_detail/39428.html
    net.ipv4.conf.all.rp_filter=0
    net.ipv4.conf.default.rp_filter=0
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_announce=2
    net.ipv4.conf.all.arp_announce=2
    
    # see details in https://help.aliyun.com/knowledge_detail/41334.html
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_syn_backlog = 1024
    net.ipv4.tcp_synack_retries = 2
    
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
    
    kernel.sysrq=1
    fs.file-max=65535

超好用的文本编辑工具

yum install -y nano;
nano /路径/文件名
交互很友好

查询上下文切换次数

vmstat

dstat

pidstat -w

升级k8s的containerd。 Containerd是一个工业标准的容器运行时,形成开放容器接口(OCI)标准的一部分.

您在所有节点上执行下这个命令,看下systemd 和containerd 的版本是否比较低。
rpm -qa |grep -E "systemd|containerd" 查看这个节点的组件不是最新,老版本有已知问题。

新版:
systemd-libs-219-67.el7_7.2.x86_64
systemd-219-67.el7_7.2.x86_64
containerd.io-1.2.10-3.2.el7.x86_64
systemd-sysv-219-67.el7_7.2.x86_64
相关细节可以参考下这篇文章 https://yq.aliyun.com/articles/699200

建议: 可以创建下快照备份,然后将节点升级下systemd

下载地址
wget https://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/daemon-build/centos/containerd.io-1.2.10-3.2.el7.x86_64.rpm
或
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm ;

然后升级
yum -y install ./containerd.io-1.2.10-3.2.el7.x86_64.rpm;
yum update systemd;

查询java的GC信息

jstat -gcutil 进程ID

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

查询哪个进程打开的文件句柄数最多

lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

lsof -p 进程id

MD5计算

md5sum xxx.jar

解决出现 Connection reset by peer

vim /etc/security/limits.conf

设置如下

root soft nofile 655350
root hard nofile 655350
root soft nproc  40960
root hard nproc  40960

* soft nofile 655350
* hard nofile 655350
* soft nproc  40960
* hard nproc  40960

刷新字体文件

 安装字体
 yum install -y fontconfig mkfontscale
 查询已安装的中文字体
 fc-list :lang=zh
 
 cd /usr/share/fonts/
 
 mkfontscale
 mkfontdir  //这两条命令是生成字体的索引信息
 fc-cache -fv //更新字体缓存

开启mysql慢查询日志 (单位/秒)

set global slow_query_log=1;
set global long_query_time = 5;
show global variables like 'slow_query_log_file';

添加磁盘交换

原文地址 https://blog.csdn.net/ithomer/article/details/53942718

[root@ithomer ~]# cd /var   (进入一个文件夹)
[root@ithomer var]# dd if=/dev/zero of=swapfile bs=1024 count=1024000    (创建1GB的swap ,一般是内存的两倍)
[root@ithomer var]# /sbin/mkswap swapfile   (创建swap文件,实际上dd已创建,此处不必再创建)
[root@ithomer var]# ll swapfile 
[root@ithomer var]# /sbin/swapon swapfile     (激活swap文件)
[root@ithomer var]# /sbin/swapon -s               (检查swap是否正确)
[root@ithomer var]# vim  /etc/fstab       (加到fstab文件中让系统引导时自动启动)
在末尾增加以下内容:
/var/swapfile swap swap defaults 0 0


# 清理磁盘交换
sync;echo 1 > /proc/sys/vm/drop_caches;swapoff -a;swapon -a;

配置ssh免密登录

在源机器上生成密匙, 拷贝到目标机器上

ssh-keygen -t rsa

ssh-copy-id targetuser@192.168.101.230

ssh 'targetuser@192.168.101.230'

登录成功!

查看当前tcp链接数

netstat -anp |grep tcp 

查看TCP状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  

查看磁盘空间命令

df 
df -m 按M显示大小

搜索文件

find /opt/upload -name '*c5300093-68cc-4d7f-8dd2-cc0875f8fedd*'

grep -C 10 'aaa' myfile.txt 搜索前后十行

实时监控磁盘读写 (1秒刷新一次)

iostat -x 1   

yum install iotop
iotop

实时监控网络流量 (1秒统计一次)

watch -n 1 "/sbin/ifconfig" (系统自带)

-----------------------

yum install libpcap nethogs -y

nethogs (查看所有流量)
nethogs eth0 (指定网卡流量)

实时监控某进程的CPU

top -p 进程ID

查询被杀掉的进程

egrep -i -b3 'Killed process' /var/log/messages 

-i忽略大小写,-b展示前后3行的上下文

查看占用磁盘swap最多的进程

for i in $(ls /proc | grep "^[0-9]" | awk '$0>100'); do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps;done| sort -k2nr | head

查看占用CPU资源最多的10个进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

查看占用内存资源最多的10个进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

查询最大的10个文件

find / -type f -print0 | xargs -0 du -h | sort -rh | head -n 10

详解:

find:在目录结构中搜索文件的命令

/:在整个系统(从根目录开始)中查找

-type:指定文件类型

f:普通文件

-print0:在标准输出显示完整的文件名,其后跟一个空字符(null)

:控制操作符,将一条命令的输出传递给下一个命令以供进一步处理

xargs:将标准输入转换成命令行参数的命令

-0:以空字符(null)而不是空白字符(LCTT 译者注:即空格、制表符和换行)来分割记录

du -h:以可读格式计算磁盘空间使用情况的命令

sort:对文本文件进行排序的命令

-r:反转结果

-h:用可读格式打印输出

head:输出文件开头部分的命令

n -10:打印前 10 个文件

统计nginx日志中某url分别被不同ip的访问次数

  grep -w '/user/list' access.log | awk '{print $1}'|sort|uniq -c
  匹配 精确等于 /user/list 从access.log文件中找 并且 将空格分割后下标为1的(ip)拼接下标为7的(api地址) 并且 排序令ip相邻 并且 去重 统计

统计日志中 MetaTask-5线程执行的平均值

2019-08-30 16:11:27.823 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveZuesDB -  
2019-08-30 16:11:27.945 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 1.204秒 -> (saveZuesDB)  -  
2019-08-30 16:11:27.945 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveMetaDB -  
2019-08-30 16:11:29.485 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 1.833秒 -> (ZuesBizTaskPacket build)  -  
2019-08-30 16:11:29.485 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentAttchmentPacket build -  
2019-08-30 16:11:29.664 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 1.719秒 -> (saveMetaDB)  -  
2019-08-30 16:11:29.664 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 225.233秒 -> (handler(packet))  -  
2019-08-30 16:11:29.795 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> handler(packet) -  
2019-08-30 16:11:30.390 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentPacket build. size[200] -  
2019-08-30 16:11:30.397 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 0.912秒 -> (ZuesTalentAttchmentPacket build)  -  
2019-08-30 16:11:30.397 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesPipelineSnapshotPacket build -  
2019-08-30 16:11:31.074 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 0.677秒 -> (ZuesPipelineSnapshotPacket build)  -  
2019-08-30 16:11:31.074 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesPipelineSnapshotItemPacket build -  
2019-08-30 16:11:34.495 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 6.672秒 -> (saveZuesDB)  -  
2019-08-30 16:11:34.495 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveMetaDB -  
2019-08-30 16:11:34.677 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 0.182秒 -> (saveMetaDB)  -  
2019-08-30 16:11:34.677 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 160.535秒 -> (handler(packet))  -  
2019-08-30 16:11:35.361 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> handler(packet) -  
2019-08-30 16:11:35.531 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentPacket build. size[200] -  
2019-08-30 16:11:43.539 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 8.008秒 -> (ZuesTalentPacket build. size[200])  -  
2019-08-30 16:11:43.539 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentEduExpPacket build -  
2019-08-30 16:11:47.694 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 17.304秒 -> (ZuesTalentPacket build. size[200])  -  
2019-08-30 16:11:47.694 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentEduExpPacket build -  
2019-08-30 16:11:48.107 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 0.413秒 -> (ZuesTalentEduExpPacket build)  -  
2019-08-30 16:11:48.107 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentProjectExpPacket build -  
2019-08-30 16:11:48.181 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 0.074秒 -> (ZuesTalentProjectExpPacket build)  -  
2019-08-30 16:11:48.181 [MetaTask-9] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentWorkExpPacket build -  
2019-08-30 16:11:48.961 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 5.422秒 -> (ZuesTalentEduExpPacket build)  -  
2019-08-30 16:11:48.961 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentProjectExpPacket build -  
2019-08-30 16:11:48.968 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 0.007秒 -> (ZuesTalentProjectExpPacket build)  -  
2019-08-30 16:11:48.968 [MetaTask-1] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentWorkExpPacket build -  
2019-08-30 16:12:06.626 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 45.809秒 -> (ZuesPipelineSnapshotItemPacket build)  -  
2019-08-30 16:12:06.626 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveZuesDB -  
2019-08-30 16:12:06.772 [MetaTask-4] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 124.203秒 -> (ZuesPipelineSnapshotItemPacket build)  -  
2019-08-30 16:12:06.772 [MetaTask-4] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveZuesDB -  
2019-08-30 16:12:10.796 [MetaTask-4] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 4.024秒 -> (saveZuesDB)  -  
2019-08-30 16:12:10.796 [MetaTask-4] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveMetaDB -  
2019-08-30 16:12:11.625 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 4.999秒 -> (saveZuesDB)  -  
2019-08-30 16:12:11.625 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveMetaDB -  
2019-08-30 16:12:14.470 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 43.396秒 -> (ZuesPipelineSnapshotItemPacket build)  -  
2019-08-30 16:12:14.470 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveZuesDB -  
2019-08-30 16:12:14.663 [MetaTask-4] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 3.867秒 -> (saveMetaDB)  -  
2019-08-30 16:12:14.663 [MetaTask-4] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 260.691秒 -> (handler(packet))  -  
2019-08-30 16:12:14.669 [MetaTask-4] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> handler(packet) -  
2019-08-30 16:12:14.708 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 3.083秒 -> (saveMetaDB)  -  
2019-08-30 16:12:14.708 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 136.07秒 -> (handler(packet))  -  
2019-08-30 16:12:14.730 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> handler(packet) -  
2019-08-30 16:12:15.154 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentPacket build. size[200] -  
2019-08-30 16:12:15.227 [MetaTask-4] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentPacket build. size[200] -  
2019-08-30 16:12:15.981 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 1.511秒 -> (saveZuesDB)  -  
2019-08-30 16:12:15.981 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> saveMetaDB -  
2019-08-30 16:12:16.134 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 0.153秒 -> (saveMetaDB)  -  
2019-08-30 16:12:16.134 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 104.815秒 -> (handler(packet))  -  
2019-08-30 16:12:18.699 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> handler(packet) -  
2019-08-30 16:12:19.121 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentPacket build. size[200] -  
2019-08-30 16:12:25.275 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 10.121秒 -> (ZuesTalentPacket build. size[200])  -  
2019-08-30 16:12:25.275 [MetaTask-2] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentEduExpPacket build -  
2019-08-30 16:12:27.430 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 停止 , 时长 : 8.309秒 -> (ZuesTalentPacket build. size[200])  -  
2019-08-30 16:12:27.430 [MetaTask-8] INFO  com.ig.transform.service.task.TalentTask-  任务 : 启动 -> ZuesTalentEduExpPacket build -  

 

grep -w "(handler(packet))" nohup.out |grep -w "MetaTask-5"|awk '{ print $12 }'|awk '{gsub("秒","");print $0 }'|awk '{sum+=$1} END {print "平均值 = ", sum/NR}'

输出: 平均值 =  67.9735

基本脚本编写

vi替换字符

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

详细模式调试脚本

sh -x startup.sh

数学运算 (不能算小数)

a=`expr 1 + 2`
echo $a

输出3

逻辑运算 (与-a 或-o)

if [ $1 -eq $2 -a $1 = 1 ]
    then
    echo "param1 == param2 and param1 = 1"
elif [ $1 -ne $2 -o $1 = 2  ]
    then
    echo  "param1 != param2 or param1 = 2"
else
    echo "others"
fi

for循环 # for var in [params] do … done

for var in 1 2 3 4 5 6 7 8 9 10
do
    echo "number is $var"
done

while循环 # while test do … done

num=1
sum=0
while [ $num -le 100 ]
do
    sum=`expr $sum + $num`
    num=`expr $num + 1`
done
#sleep 5
echo $sum

case判断

op=a
case $op in
        a)
    echo "you selected a";;
        b)
    echo "you selected b";;
    c)
    echo "you selected c";;
    *)
    echo "error"
esac

菜单选择 # select var in [params] do … done

select var in "java" "c++" "php" "linux" "python" "ruby" "c#"
do
    break
done
echo "you selected $var"

判断是否是文件夹 # if test $1 then … else … fi

if [ -d $1 ] 
then
    echo "this is a directory!"
else
    echo "this is not a directory!"
fi

循环中退出 # continue, break

i=0
while [ $i -le 100 ]
do
    i=`expr $i + 1`
    if [ $i -eq 5 -o $i -eq 10 ]
        then continue;
    else
        echo "this number is $i"
    fi
 
    if [ $i -eq 15 ]
        then break;
        fi
done

json解析

yum install jq

data=$(curl "localhost:$PORT/transform/meta/task/setStateSuspendAll")
jq -n "$data"  #打印控制台json
form_port=$(jq -n "$data"  | jq .form_port) #获取某个值

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

备案信息公示
京ICP备18003381号
京ICP备18003381号-1