查看进程运行时间
ps -p [pid] -o lstart,etime
查看物理CPU个数
grep 'physical id' /proc/cpuinfo | sort -u
查看核心数量
grep 'core id' /proc/cpuinfo | sort -u | wc -l
通过进程号获取进程启动路径
-
获取进程PID,然后进入/proc/进程PID,然后 ls -l
通过进程号获取进程启动命令.png -
或者使用
pwdx命令pwdx [pid]
pstack
pstack 可用来跟踪进程栈,这个命令在排查进程假死的问题时非常有用。可以在一段时间内,多次执行pastck查看堆栈,若发现代码总是停留在同一个位置,那么很可能就是出问题的地方。
pstack pid > log
通过命令快速找到进程号
pidof [xxx]
获取进程线程数量
- psTree
psTree -p [进程号] - ps
ps -mp [进程号] -o THREAD,tid
ifconfig 命令
ifconfig // 显示网卡信息
ifconfig eth0 up // 开启eth0网卡
ifconfig eth0 down // 关闭eth0网卡
route 命令
- 输出路由表
ping
确定网络主机的连通状态
- 发指定个数ping包
- linux
ping -c 4 www.baidu.com - windows
- linux
- 指定ping报文数据包大小
ping -s 512 www.baidu.com
telnet
用于确定目标主机端口是否打开
telnet www.baicu.com 80
nc
- 规则
- 连接服务器某端口
可用来测试对方端口是否打开nc -v 127.0.0.1 12345 - 在某个端口开启监听
nc -v -l 12345 - 用nc来发送接收文件
- 接收端
nc -l ip地址 端口号 > 接收的文件名 - 发送端
nc ip地址 端口号 < 发送的文件名
- 接收端
lsof(list opened fd)
lsof(list open files)是一个列出当前系统打开文件的工具:
-
可用来查看当前进程加载的动态库。
lsof.png- COMMAND
进程的名称 - PID
进程标识符 - USER
进程所有者 - FD
文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等 - TYPE
文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。 - DEVICE
指定磁盘的名称 - SIZE
文件的大小 - NODE
索引节点(文件在磁盘上的标识) - NAME
打开文件的确切名称
- COMMAND
-
查看谁在使用某个文件或者某个目录
lsof abc.txt -
查看指定进程打开的文件句柄
lsof -c mysql lsof -p 222 -
列出TCP连接网络连接信息
lsof -i tcp -Pn -
列出UDP连接网络连接信息
lsof -i udp -
查找谁在使用某个端口
lsof -i tcp:80 -
查看文件删除但确被其他进程占用
lsof | grep deleted
nload
- 使用 nload 命令查看网卡带宽
# nloadimage.png
- 指定网卡名称,监控指定网卡的带宽
# nload ens38
nethogs
nethogs 可以显示每个进程所使用的带宽,并对列表排序,将耗用带宽最多的进程排在最上面。如果出现带宽使用突然激增的情况,可以迅速打开nethogs,就可以找到导致带宽使用激增的进程。nethogs可以报告程序的进程编号(PID)、用户和路径。
iftop
netstat
netstat -[atunlp]
-a:列出目前系统上所有的连接,监听,socket
-t:列出tcp网络数据包数据
-u:列出udp网络数据包数据
-n:不列出进程的服务名称,以端口号来显示
-l:列出目前正在监听的网络
-p:列出网络服务的PID
查看某个端口是否被占用
netstat -anp | grep 80
统计TCP套接字各状态信息
netstat -ant | awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'
netstat 中Recv-Q 和 Send-Q的意义
-
当套接字处于连接状态时
- Recv-Q 表示套接字缓冲还没有被应用程序取走的字节数(即接收队列长度)
- Send-Q 表示还没有被远端主机确认的字节数(即发送队列长度)
-
当套接字处于监听状态时
- Recv-Q 表示全连接队列的长度。
- Send-Q 表示全连接队列的最大长度。
全连接,是指服务器收到了客户端的 ACK,完成了 TCP 三次握手,然后就会把这个连接挪到全连接队列中。这些全连接中的套接字,还需要被 accept() 系统调用取走
curl
curl 是一个工具,用于传输来自服务器或者到服务器的数据。
-i
在输出的内容中包含HTTP 头信息。
curl -i https://www.baidu.com
-o
抓取页面内容并将其保存到本地文件
curl https://www.baidu.com -o baidu
-s
静默模式,不输出到终端。
-X
指定HTTP请求方法。
-H
(HTTP) 要发送到服务端的自定义请求头。
curl -H 'Connection: keep-alive' -H 'Referer: https://sina.com.cn' http://www.baidu.com
-G
-G 参数用来构造URL的查询字符串
curl -G -d 'q=kitties' -d 'count=20' http://baidu.com/search
上面命令会发出一个 GET 请求,实际请求的 URL 为http://baidu.com/search?q=kitties&count=20。如果省略-G,会发出一个 POST 请求。
curl -G --data-urlencode 'comment=hello world' https://www.baidu.com
-d
-d参数用于发送请求的数据体。
-
提交json数据
curl -H "Content-Type: application/json" -d '{"username":"tom", "password":"123456"}' http://localhost/login -
提交表单
curl -F "username=tom" -F "password="1234456" http://localhost/register -
如果回应响应是json数据,那么我们还可以使用格式化json数据
curl -X GET http://xxx -s | python -m json.tool
同时内容还可以从文件中读取:
curl -d '@data.txt' https://google.com/login # 读取data.txt文件的内容,作为数据体向服务器发送。
比如发起带json内容的 put 请求:
curl -X PUT -H "Content-Type: application/json" -d '@data.txt' https://google.com/login
--local-port
指定本地的一个端口去连接
curl --local-port 9000 http://www.baidu.com/
-A
(HTTP) 指定要发送到HTTP服务端的User-Agent字符串,当然也可以使用 -H, --header 选项来设置。
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/75.0.3770.999" http://www.baidu.com
参考资料



