基础操作
#创建用户名xiaoming 将密码设置为123456
useradd -ou 0 xiaoming -g 0
echo '123456' | passwd --stdin xiaoming
#内存资源过大手动释放
sync
echo 3 >/proc/sys/vm/drop_caches
# 文件操作
# 查看文件夹个数
ls -l|grep "^d"| wc -l
# 查看当前文件数量
ls -l|grep "^-"| wc -l
文件设置权限防止误删
# 添加权限防止误删
chattr +i authorized_keys
# 去掉权限防止误删
chattr -i authorized_keys
https://man.linuxde.net/chattr
磁盘容量
df -lh
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda8 11G 6.0G 4.4G 58% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/sda1 56G 22G 35G 39% /mnt/sda1
#当前分区情况查看
fdisk -l
#显示SCSI硬盘的每个分区情况
fdisk -lu
#查看当前文件目录
ls -lht
#大文件查看
sudo du -h --max-depth=1|grep G
#查看opt文件有多少大于1G的
find /opt -type f -size +1G
内存查看
# 查看剩余可用内存情况(M)
free -m
# 查看内存消耗前5的进程
ps auxw | head -1;ps auxw|sort -rn -k4|head -5
# 内存释放
sync
echo 3 >/proc/sys/vm/drop_caches
redis操作
#redis集群连接
redis-cli -h 192.168.1.2 -p 7001 -c --raw
#单实例连接
redis-cli -h 192.168.1.2 -p 7001 -c --raw
#查询集群单实例所有keys为“helloWork”值的
./redis-cli -h 192.168.1.2 -p 7001 -c --scan --pattern "helloWork:*" | wc -l
#删除集群单实例所有keys为“helloWork”值的
redis-cli -h 192.168.1.2 -p 7001 -c --scan --pattern "helloWork:*" | xargs -n 1 redis-cli -h 192.168.1.2 -p 7001 del
# redis 批量删除(一次删除5000)
redis-cli -h 192.168.1.2 -p 8443 -a test --scan --pattern "guids*" | xargs -L 5000 redis-cli -h 192.168.1.2 -p 8443 -a test del
# 查询所有key
scan 0 MATCH * COUNT 2741099
# 所有key导出
echo "scan 0 MATCH * COUNT 2741099" | redis-cli -h 127.0.0.1 -p 8598 >1.txt
软连接
#软连接查看
ls -li
#软连接切换
ln -sfn newaddress linkname
#创建软连接
ln -s /data/kafka /kafka
文件类操作
# 切割文件从第1行-174929行 源文件userInfo_13.txt 写入到userInfo_01.txt
sed -n '1,174929p' userInfo_13.txt > userInfo_01.txt
# error.2019-08-01.log 日志中重复的数字将写到 lance444.txt 文件中
awk 'a[$0]++' error.2019-08-01.log >> lance444.txt
dstat 命令
--total-cpu-usage---- CPU使用率
usr:用户空间的程序所占百分比;
sys:系统空间程序所占百分比;
idel:空闲百分比;
wai:等待磁盘I/O所消耗的百分比;
hiq:硬中断次数;
siq:软中断次数;
--dsk/total-------- 磁盘统计
read:读总数
writ:写总数
--net/total--------- 网络统计
recv:网络收包总数
send:网络发包总数
---paging------- 内存分页统计
in: pagein(换入)
out:page out(换出)
--system-------- 系统信息
int:中断次数
csw:上下文切换
注:中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。
### 常用参数组合
dstat --disk-util :显示某一时间磁盘的忙碌状况
dstat --freespace :显示当前磁盘空间使用率
dstat --proc-count :显示正在运行的程序数量
dstat --top-bio :指出块I/O最大的进程
dstat --top-cpu :图形化显示CPU占用最大的进程
dstat --top-io :显示正常I/O最大的进程
dstat --top-mem :显示占用最多内存的进程
# 内存top统计
dstat -g -l -m -s --top-mem
# cpu top 统计
dstat -c -y -l --proc-count --top-cpu
存储类问题定位
# 磁盘出现瓶颈查看当前目录下各个文件夹大小
du -h --max-depth=1
# 查看某个文件夹下超过1G大小文件
sudo find /workspace -type f -size +1G
# 快速生成指定大小文件
dd if=/dev/zero of=test bs=1M count=20000
网络类问题定位
TPC层面问题定位
# TPC 连接数查看
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
网络类问题监控
### 每个进程的带宽使用
nethogs
### 每个套接字连接的带宽使用
iftop
端口类问题定位
# 根据端口号反推进程号
lsof -i :8080
netstat -antup |grep 8080
句柄数类问题监控
### 统计各进程打开句柄数
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr
### 统计各用户打开句柄数
lsof -n|awk '{print $3}'|sort|uniq -c|sort -nr
### 统计各命令打开句柄数
lsof -n|awk '{print $1}'|sort|uniq -c|sort -nr
### 单个进程打开的句柄数 grep 后面跟pid (不推荐使用)
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more|grep 22229
问题分析:
1、打开文件未释放
2、打开管道未释放
3、建立网络连接未释放(pipe,eventpoll多出现在 NIO 网络编程未释放资源 —— selector.close())
4、创建进程调用命令未释放(Runtime.exe(...) 得到的 Process, InputStream, OutputStream 未关闭,这也会导致 pipe,eventpoll 未释放)
5、mina库使用NIO时未使用connector.dispose();
6、netty3库使用NIO时未使用bootstrap.shutdown() 或bootstrap.releaseExternalResources();
netty4使用NIO时未使用 eventLoopGroup.shutdownGracefully();
网络类测试
### 服务端启动
iperf3 -s
### 客户端启动
iperf3 -c 192.168.131.254 -i1 -t 1200