linux命令工具

146 阅读7分钟

性能监控篇

top

全盘监控,cpu,内存,io等待开销

cpu属性值说明:

  • %user:CPU处在用户模式下的时间百分比。
  • %nice:CPU处在带NICE值的用户模式下的时间百分比。
  • %system:CPU处在系统模式下的时间百分比。
  • %iowait:CPU等待输入输出完成时间的百分比。如该值过高,表示硬盘存在I/O瓶颈
  • %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
  • %idle:CPU空闲时间百分比。如该值高,表示CPU较空闲, 如该值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。 如该值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU

1108f70567e7b4a328db7e7f0a74af2.png

dd

i/o工具,linux默认携带

dd if=/dev/hdb of=/dev/hdd #将本地的/dev/hdb整盘备份到/dev/hdd 
dd if=/dev/hdb of=/root/image #将/dev/hdb全盘数据备份到指定路径的image文件 
dd if=/root/image of=/dev/hdb #将备份文件恢复到指定盘 
dd if=/dev/hdb | gzip > /root/image.gz #备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径 
gzip -dc /root/image.gz | dd of=/dev/hdb #将压缩的备份文件恢复到指定盘 
dd if=/dev/urandom of=/dev/hda1 # 销毁磁盘数据 注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。

企业微信截图_17150720335202.png

iotop

io工具,展示io进程排序信息。需要额外安装

安装

 yum install iotop

使用方式

 iotop -o
 显示正在执行i/o操作的进程

sysstat

linux系统平台性能监听工具包

截取官网说明(sysstat.github.io)

image.png

iostat

是sysstat工具包里面的一套件,主要是展示io 读写速率比信息,但是该工具可以让我们监听看到数据盘和系统盘的io情况,比起dd,top更加明细,有利于分析

使用方式

 iostat 1 3
 循环3次,时间间隔1秒

企业微信截图_17149782851530.png

pidstat

是sysstat工具包里面的一套件,主要是展示进程消耗cpu信息,如果没有特殊要求的话,其实和top差不多,获取的内容来说,但是它有个亮点就是-t -p,可以输出具体进程的线程使用情况。在我们达梦数据库填坑时,是用到了辅助分析了

使用方式

 pidstat -t -p pid
 查看pid进程子线程的工作信息

企业微信截图_1715071089184.png

sad

借助它可以查看系统的很多方面状态

常用参数
  • -A 查看最全的信息
  • -B 查看paging统计
  • -b 查看输入输出信息
  • -d 查看块设备活动
  • -n {keyword | ALL} 查看网络信息
  • -P {cpu_list | ALL } 指定CPU核查看信息
  • -r 查看内存使用率信息
  • -S 查看swap空间的使用信息
  • -u 查看CPU使用率

使用方式

 sad -S 1 5

使用方案

结合cron定时任务生成系统报告

strace

对于我而言,这个工具就是调试c/c++程序的工具,通过strace xx我们就是获取波报错信息。毕竟我是java程序员。有时候无法把握linux默认报错信息,所以通过这个来辅助论证猜想

常用参数
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出.
-a column
设置返回值的输出位置.默认 为40.
-e expr
指定一个表达式,用来控制如何跟踪.格式如下:
[qualifier=][!]value1[,value2]...
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如:
-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none.
注意有些shell使用!来执行历史记录里的命令,所以要使用\.
-e trace=set
只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all.
-e trace=file
只跟踪有关文件操作的系统调用.
-e trace=process
只跟踪有关进程控制的系统调用.
-e trace=network
跟踪与网络有关的所有系统调用.
-e strace=signal
跟踪所有与系统信号有关的 系统调用
-e trace=ipc
跟踪所有与进程通讯有关的系统调用
-e abbrev=set
设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all.
-e raw=set
将指 定的系统调用的参数以十六进制显示.
-e signal=set
指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号.
-e read=set
输出从指定文件中读出 的数据.例如:
-e read=3,5
-e write=set
输出写入到指定文件中的数据.
-o filename
将strace的输出写入文件filename
-p pid
跟踪指定的进程pid.
-s strsize
指定输出的字符串的最大长度.默认为32.文件名一直全部输出.
-u username
以username 的UID和GID执行被跟踪的命令

使用方式

 strace -o xx.txt -T -e -tt trace=process -p xxx
 查看某个进程执行日志导入到xx.txt

lsof

查看文件使用情况,必须要root权限使用,才能物尽其用。 linux万物都是文件,lsof可以查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)。网络/磁盘等都是文件这个是很重要的认知。由此,我们可以查看网络监听端口,磁盘io情况

参数

  • -p 查看进程id对应打开的文件信息
  • -a 列出全部已打开文件的进程信息
  • -i 列出符合条件的进程信息
  • -u 列出xx用户打开文件的列表
  • -c 列出xx应用信息,按照应用名称来查询

展示信息说明

名称说明
FD文件描述符
TYPE文件类型

使用方式

  lsof -p xxx
  查看xx进程打开的相关文件明细
  
  lsof -u xx
  查看用户xx用了啥文件信息
  
  lsof -i
  

网络篇

netstat

网络情况工具,更多体现在端口监听方面

ping

telnet

curl

用于模拟内网应答,通常情况下都是在测试应用接口应答,模拟client端发起的请求

语法


curl  -X GET {http地址}
curl -H -X GET {http地址}
curl -k -X GET {https地址}
curl -H {请求头} -X POST -k -d {参数} {https/http地址}

案例


curl  -X GET http://127.0.0.1:7006/iotDataHandle/test

curl -k -X GET https://19.135.20.46/StandardApiAction_queryAlarmDetail.action?jsession=cf6b70a3-c82b-4392-8ab6-bbddce336222&devIdno=500000&armType=2,9,11&handle=0&currentPage=1&pageRecords=50&toMap=2&checkend=0



curl -H 'Authorization:bearer eyJraWQiOiJ0eS1vYXV0aC1zdmMiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJOQnpoaHciLCJ1c2VyX25hbWUiOiLnrqHnkIblkZgiLCJpc3MiOiJodHRwOlwvXC8xMDAuOTAuMTUuMTA6NjAwMDEiLCJkZXB0X25hbWUiOiLlroHms6LluIIiLCJhZG1pbiI6dHJ1ZSwiYXVkIjoiYXBpLXJlc291cmNlIiwibmJmIjoxNjkwOTcwMDI5LCJzY29wZSI6WyJST0xFX1BRWS4xMjYxQTZCNTNGQUUiLCJST0xFX1hDWS4xMjY0MTc5QjJDODUiLCJST0xFX0dDR0xZLjEyNUY0QzY4MEVENSIsIlJPTEVf5rWL6K-V57yW5Y-3IiwiUk9MRV9ZSFhNWi4xMjVkMjJkYjE2OTAiLCJST0xFX1NZWFQuMTI2NDEzMTJCNzMwIiwiUk9MRV9BSlpSRFcuMTI2NDEyQzdDQTRCIiwiUk9MRV9HQ0JKWUpTLjEyNUY0QzY4MEY0MiIsIlJPTEVfU0pTUEpLSlMuMTI2M0REMDQwQjI0Il0sImV4cCI6MTY5MTE0MjgyOSwiZGVwdF9pZCI6IkE0RjhEQTlCLTI4RkUtNDM5Mi04Q0EzLTdBMTJBRDNDREQ3NSIsImlhdCI6MTY5MDk3MDAyOSwianRpIjoiNTNiMzljM2MtNWQzNS00MzkzLWFlZGYtYjE3OGExZGE4YTEzIn0.aJj3XjAIiz_57FAtChTRncFqn-M9VHvJ9oH5XL680FUHWHn5vHa-bLhG2Jzz1bt-bXFZH5nB00uLrGNAsOJP5T8xJLLWm-5yEzwRUgjYfyVVvsz_qqPnczVzraIWjLtHwaapnn6dOoiakyymwpmSYA2h_sL5DuNpDi7DrWGKTZCUm4f6OZrncEIsKD9d4udAjIYX_1jlbLj9nb0kLifk3XdpwyppUFC89gTxSSgkzIkYX83g_lKwHnwrcswku2m9ktgHfP3rhC75qN43gAnWm87jLqozkeM4am4rcnw3Mrw10F3PhdHRjPTF2O4ngBziBG3ythD_ce4G9iqDcXV3aQ' -X GET http://127.0.0.1:50018/sysLog/operation/save?token=11af3449dbf2c4d8066d203d13066119


curl -H "Content-Type: application/json" -X POST -d '{}'  http://64.25.112.36/YM/api/Ym/pwebvcall


curl -H "Content-Type: application/json" -H "token: 11af3449dbf2c4d8066d203d13066119" -X POST -d '{"owningSystem":"test","ip":"100.32.130.167","creatorName":"1","userAgent":"fsdfs","operation":0,"createDate":"2023-01-01 00:00:00","status":0} ' https://100.32.130.167:11001/dit-admin/sys/log/login/save


wget

用于模拟内网应答,通常情况下都是在测试应用接口应答,模拟client端发起的请求