背景
开源是信创的基石(不管承认与否).
信创操作系统的基石是 Linux
Linux的使用,调优,排故需要很多武器库
与之前Linux基础知识不同, 本次的文档是由浅到深的
其实需要较多的时间进行练习和记录
基础工具
Linux的链接
Finalshell\Winterm\MobaXterm\Xshell
以及Windows的bash
开源的工具可以使用
winscp 上传文件
putty 链接系统
基础命令-有一定基础的可以不看这一章节
需要说明: 大部分基础命令都是小写. linux区分大小写
cd 切换到部分目录, cd 切换到用户的家目录 cd - 切换到上一个目录.
ls 展示目录下的文件/文件夹, ls -l 显示详细信息 ls -al 显示隐藏文件.
su 切换用户, 比如 su - oracle 其中 '-' 代表目标用户的环境变量.
ip addr 显示ip地址.
hostname 显示机器名. hostnamectl set-hostname newname 换名字
tar 打包/解包命令. -czvf 创建gzip的压缩包 -zxvf 解压缩gzip打包压缩后的文件.
unzip 解压缩 zip 包, 增加 -O CP936 按照GBK字符集进行解压缩,避免中文乱码
mkdir 创建目录. mkdir -p 级联创建,并且如果有目录不易报错.
rm -rf 如果和面是 '/' 则为自动离职命令. rm -rf 一定压注意目录, 会递归删除目录文件
./some.sh 在当前目录下执行 some.sh 的shell脚本或者是命令.
nohup ./some.sh >/dev/null & 后台运行命令. 避免远程终止,服务中断.
cat 查看文件,或者是多个文件合并成为一个文件.
tail -f 动态查看文件. 文件有变化后可以直接查看.
chmod 修改文件权限, 需要说明, 不能在 下面执行, 可以在具体目录下执行.
chown 修改文件属主. 一般数据库或者是非root用户执行软件时需要.
进阶命令0.1
Linux文本三剑客
sed 流式处理文件
grep 过滤文本
awk 处理文本进行展示的工具
重要命令工具
vim 命令行界面处理文件.
vim 命令界面->编辑界面->可视界面.
需要熟记里面的命令. 方便进行文本的修改.
红帽系的软件安装
yum install/rpm -ivh 在线/离线安装包.
top 查看CPU使用率的情况, 可以界面内输入P按照CPU排序, 输入M 按照 进程内存排序.
top -Hp $pid 可以查看单进程下面多个线程的使用情况
top -Hp $pid -bn 1 可以将结果打印出来. 可以使用 > 写入到具体文件.
ps -ef |grep java 可以查看java进程信息.
free -m 按照MB为单位查看 操作系统剩余的内存信息.
df -Th 查看磁盘容量情况.
du -ahd 1 |sort -k1h 查看目录下数据文件的大小等情况.
lscpu 查看CPU的核心数/架构/主频等信息.
进阶命令0.2
红帽系需要安装 yum install sysstat
分命令:
sar收集并显示所有系统活动统计信息。
sadc代表“系统活动数据收集器”。这是进行数据收集的 sar 后端工具。
sa1将系统活动存储在二进制数据文件中。为此目的,sa1 依赖于 sadc。sa1 从 cron 运行。
sa2创建收集的统计信息的每日摘要。sa2 从 cron 运行。
sadf可以生成 CSV、XML 和各种其他格式的 sar 报告。使用它来将 sar 数据与其他工具集成。
iostat生成 CPU、I/O 统计信息
mpstat显示 CPU 统计信息。
pidstat根据进程 ID (PID) 报告统计信息
nfsiostat显示 NFS I/O 统计信息。
cifsiostat生成 CIFS 统计信息。
进阶命令0.2
sar 展示CPU信息
sar --help 展示帮助信息
sar -r 展示内存相关信息
sar -B 展示内存swap信息
sar -b 展示IO相关信息
sar -n DEV ens60 展示网卡信息
sar 其实比 node exporter要管用
在没有监控的情况下 sar 是定位问题的最有利的武器.
组合命令1
for i in `ps -ef |grep java |grep -v nacos |grep -v grep \
|awk '{print $2}'` ; do echo $i ; echo -n "该进程的堆内存总数(KB): " ;\
pmap -x $i |sort -k3h |tail -n 2 |cut -c 17- |awk '{print $2}' |head -n 1 ;\
pmap -x $i |sort -k3h |tail -n 2 |cut -c 17- |awk '{print $2}'\
|awk 'NR==2{second=$1} NR==1{first=$1; next} END{print "该进程的堆外总内存(KB): " \
second-first}' ; echo -n "该进程全部内存总数(KB): " ; pmap -x $i |sort -k3h \
|tail -n 2 |cut -c 17- |awk '{print $2}' |tail -n 1 ; done
组合命令1的效果
检查当前服务器上面的非nacos的java进程的内存信息
主要分为三部分:
打印线程id后面加上 该进程在用的堆内内存, 堆外内存,以及使用的所有内存
效果为:
181248
该进程的堆内存总数(KB): 1167872
该进程的堆外总内存(KB): 970148
该进程全部内存总数(KB): 2138020
组合命令1的简单解释
for i in `ps -ef |grep java |grep -v nacos |grep -v grep |awk '{print $2}'`\
查看不是 nacos , 不是当前grep 进程的java进程信息.
并且之获取这些进程的 pid 信息. 然后使用for循环的方式进行赋值
; doecho$i ; echo -n "该进程的堆内存总数(KB): " ;\
换行打印这个pid, 并且不换行打印"该进程的堆内存总数."
pmap -x $i |sort -k3h |tail -n 2 |cut -c 17- |awk '{print $2}' |head -n 1 ;\
通过pmap 获取该进程的内存信息, 然后按照 rss 内促进行排序,并且只取最大两条中的较小的一条.
pmap -x $i |sort -k3h |tail -n 2 |cut -c 17- |awk '{print $2}'\
|awk 'NR==2{second=$1} NR==1{first=$1; next} END{print "该进程的堆外总内存(KB): " second-first}' ;
取这两条进行减法运算, 就是pmap监控里面中的非堆区的信息
echo -n "该进程全部内存总数(KB): " ; pmap -x $i |sort -k3h \
|tail -n 2 |cut -c 17- |awk '{print $2}' |tail -n 1 ; done
最大一行的数据就是该进程使用的内存信息
需要说明这个信息与top 命令中的 rss 值是一样的
也可以理解为 top 是从 pmap里面进行取数.
组合命名2
cat > checkprocess.sh << EOF
let uptime=\`cat proc/sched_debug |grep ktime |awk '{print \$3}' |awk -F '.''{print \$1}'\`
let uptime=uptime/10
let pid=\`ps -ef |grep java |grep caf |head -n 1 |awk '{print \$2}'\`
for i in \`ls proc/\$pid/task \` ;
doecho -n \`cat proc/\$pid/task/\$i/stat |awk -F '(''{print \$2}' |awk -F ')''{print \$1}' \` ;
echo -n " 线程号: "
echo -n \`cat proc/\$pid/task/\$i/stat |awk '{print \$1}' \` ;
echo -n " 线程的启动后的时间(秒钟): "
let threadtime=\`cat proc/\$pid/task/\$i/stat | awk -F ')''{print \$2}' |awk '{print \$20}'\` ;
let threadtime=(uptime-threadtime)/100 ;
echo -n \$threadtime
echo -n " 线程占用的CPU时间(毫秒): "
let runingtime=\`cat proc/\$pid/task/\$i/sched |grep se.sum_exec_runtime |awk '{print \$3}' |awk -F '.''{print \$1}'\`
let runingtime=runingtime
echo \$runingtime
done
EOF
组合命令2的效果
chmod 777 checkprocess.sh
./checkprocess.sh
结果为:
java 线程号: 20845 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 3
java 线程号: 20850 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 574998
java 线程号: 20867 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 6965
java 线程号: 20868 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 7020
java 线程号: 20869 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 6984
java 线程号: 20870 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 6911
java 线程号: 20871 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 6977
java 线程号: 20872 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 6929
java 线程号: 20873 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 6886
java 线程号: 20874 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 6944
java 线程号: 20875 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 7021
java 线程号: 20876 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 7005
VM Thread 线程号: 20881 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 1793
Reference Handl 线程号: 20885 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 123
Finalizer 线程号: 20887 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 160
Signal Dispatch 线程号: 20906 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 0
server-timer 线程号: 21005 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 5
server-timer1 线程号: 21006 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 39
Thread-3 线程号: 21017 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 71
C2 CompilerThre 线程号: 21018 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 14623
C2 CompilerThre 线程号: 21019 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 15897
C2 CompilerThre 线程号: 21020 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 13619
C1 CompilerThre 线程号: 21021 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 3457
Service Thread 线程号: 21023 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 70
VM Periodic Tas 线程号: 21025 线程的启动后的时间(秒钟): 586 线程占用的CPU时间(毫秒): 461
prometheus-http 线程号: 21148 线程的启动后的时间(秒钟): 585 线程占用的CPU时间(毫秒): 1355
logback-1 线程号: 21177 线程的启动后的时间(秒钟): 579 线程占用的CPU时间(毫秒): 2
logback-2 线程号: 21805 线程的启动后的时间(秒钟): 519 线程占用的CPU时间(毫秒): 1
logback-3 线程号: 22328 线程的启动后的时间(秒钟): 459 线程占用的CPU时间(毫秒): 0
pool-3-thread-8 线程号: 22736 线程的启动后的时间(秒钟): 409 线程占用的CPU时间(毫秒): 49827
logback-4 线程号: 22806 线程的启动后的时间(秒钟): 399 线程占用的CPU时间(毫秒): 0
logback-5 线程号: 23284 线程的启动后的时间(秒钟): 339 线程占用的CPU时间(毫秒): 0
logback-6 线程号: 23758 线程的启动后的时间(秒钟): 279 线程占用的CPU时间(毫秒): 0
pool-3-thread-1 线程号: 23942 线程的启动后的时间(秒钟): 252 线程占用的CPU时间(毫秒): 21783
logback-7 线程号: 24235 线程的启动后的时间(秒钟): 219 线程占用的CPU时间(毫秒): 0
pool-3-thread-1 线程号: 24448 线程的启动后的时间(秒钟): 188 线程占用的CPU时间(毫秒): 31017
pool-3-thread-1 线程号: 24450 线程的启动后的时间(秒钟): 188 线程占用的CPU时间(毫秒): 28568
logback-8 线程号: 24759 线程的启动后的时间(秒钟): 159 线程占用的CPU时间(毫秒): 0
文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




