「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」。
1.查看活动进程信息ps
ps -aux
ps -aux // 查看所有正在活跃的进程信息
ps aux | grep ket_gateway_api //查看当前正在运行的ket_gateway_api相关进程的信息
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 191072 3568 ? Ss 2019 261:09 /usr/lib/systemd/systemd --system --deserialize 18
root 2 0.0 0.0 0 0 ? S 2019 0:21 [kthreadd]
root 3 0.0 0.0 0 0 ? S 2019 1:57 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/0:0H]
root 8 0.0 0.0 0 0 ? S 2019 1:02 [migration/0]
root 9 0.0 0.0 0 0 ? S 2019 0:00 [rcu_bh]
......
root 76 0.0 0.0 0 0 ? S 2019 0:07 [ksoftirqd/13]
root 78 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/13:0H]
一般查询 PID 主要是用来杀死一个没有响应的程序,它类似于 Windows 任务管理器一样。 Linux GUI 也提供相同的功能,但 CLI 是执行 kill 操作的有效方法。
什么是进程 ID?
PID 代表进程标识号process identification,它在大多数操作系统内核(如 Linux、Unix、macOS 和 Windows)中使用。它是在操作系统中创建时自动分配给每个进程的唯一标识号。一个进程是一个正在运行的程序实例。
除了 init 进程外其他所有的进程 ID 每次都会改变,因为 init 始终是系统上的第一个进程,并且是所有其他进程的父进程。它的 PID 是 1。
PID 默认的最大值是 32768。可以在你的系统上运行 cat /proc/sys/kernel/pid_max 来验证。在 32 位系统上,32768 是最大值,但是我们可以在 64 位系统上将其设置为最大 222(约 4 百万)内的任何值。
你可能会问,为什么我们需要这么多的 PID?因为我们不能立即重用 PID,这就是为什么。另外为了防止可能的错误。
系统正在运行的进程的 PID 可以通过使用 pidof、pgrep、ps 和 pstree 命令找到。
ps 显示活动进程的选择信息。它显示进程 ID(pid=PID)、与进程关联的终端(tname=TTY)、以 [DD-]hh:mm:ss 格式(time=TIME)显示的累计 CPU 时间、以及执行名(ucmd = CMD)。输出默认是未排序的。
ps aux | grep "apache2"
www-data 2361 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k start www-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k start root 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k start root 5648 0.0 0.0 12784 940 pts/0 S+ 21:32 0:00 grep apache2 从上面的输出中,我们可以根据进程的启动日期轻松地识别父进程 ID(PPID)。在此例中,apache2 启动于 Dec 11,它是父进程,其他的是子进程。apache2 的 PID 是 3754。
via: www.2daygeek.com/how-to-chec…
2.测网络连通性
2.1)ipconfig查看网络配置
2.2)ping + ip: 查看某一个ip地址是否能够连通,如: ping 114.80.67.193
2.3)telnet ip port : 查看某一个机器上的某一个端口是否可以访问,如:telnet 114.80.67.193 8080
2.4)nslookup server domain:查询dns记录,域名解析是否正常,如:nslookup baidu.com,
nslookup wiki.op.ksyun.com
3.查看线程信息
Linux用户态命令查看线程
①top
默认top显示的是task数量,即进程。
可以利用敲"H",来切换成线程;也可以直接利用top -H命令来直接打印线程情况。
②ps
ps的-L选项可以看到线程,通常能打印出LWP和NLWP相关信息。如下命令即可查看线程信息:
ps -eLf
③pidstat
pidstat -t [-p pid号] 可以打印出线程之间的关系。
4.后台运行程序
nohup和&的区别
& : 指在后台运行
nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出
那么,我们可以巧妙的吧他们结合起来用就是 nohup COMMAND & 这样就能使命令永久的在后台执行 例如:
- sh test.sh &
将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失(缺少的日志的输出)
将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。
2. nohup sh test.sh
将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。
3. nohup sh test.sh &
将sh test.sh任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。
nohup nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
nohup 是 no hang up 的缩写,就是不挂断的意思。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。
nohup使用案例
- nohup command > myout.file 2>&1 &
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ; 2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到myout.file文件中。 2. 0 22 * * * /usr/bin/python /home/pu/download_pdf/download_dfcf_pdf_to_oss.py > /home/pu/download_pdf/download_dfcf_pdf_to_oss.log 2>&1
这是放在crontab中的定时任务,晚上22点时候怕这个任务,启动这个python的脚本,并把日志写在download_dfcf_pdf_to_oss.log文件中
5.统计访问日志
一般服务器上的接口请求都记录在接口访问access日志中,访问日志有不同的分隔方案,假如每小时的请求放在日志文件中,例如2021-11-23 19:00 ~ 2021-11-23 20:00的日志 放在access.2021112319.001.log文件中,现要统计该接口QPS,可以使用如下命令统计在每台服务部署机器上统计、汇总,然后计算该接口QPS:
cat access.202111* | grep GetTaskByTaskID | grep -v grep | wc -l
该命令统计GetTaskByTaskID接口访问量。
// 过滤并打印GetTaskByTaskID接口访问日志
cat access.202111* | grep GetTaskByTaskID
// 结果
2021/11/23 17:57:23.127 10.210.137.244 - - [23/Nov/2021 05:57:23] "GET /offline/GetTaskByTaskID?TaskID=84e40fad71353746c4d7217be029daz120211123 HTTP/1.0 200 0" 0.046127 PostmanRuntime/7.28.4
2021/11/23 17:58:12.597 10.210.137.237 - - [23/Nov/2021 05:58:12] "GET /offline/GetTaskByTaskID?TaskID=e5545142be7d2e774030a5450db31dz120211123 HTTP/1.0 200 0" 0.005519 PostmanRuntime/7.28.4
2021/11/23 17:58:46.597 10.210.137.237 - - [23/Nov/2021 05:58:46] "GET /offline/GetTaskByTaskID?TaskID=e5545142be7d2e774030a5450db31dz120211123 HTTP/1.0 200 0" 0.004634 PostmanRuntime/7.28.4
2021/11/23 18:01:17.707 10.210.149.232 - - [23/Nov/2021 06:01:17] "GET /offline/GetTaskByTaskID?TaskID=c3ee2afaa393d4be654fe8f8f08929z120211123 HTTP/1.0 200 0" 0.004756 curl/7.79.1
2021/11/23 18:24:49.552 10.210.135.242 - - [23/Nov/2021 06:24:49] "GET /offline/GetTaskByTaskID?TaskID=e5545142be7d2e774030a5450db31dz120211123 HTTP/1.0 200 0" 0.004940 curl/7.79.1
2021/11/23 18:29:05.150 10.210.143.238 - - [23/Nov/2021 06:29:05] "GET /offline/GetTaskByTaskID?TaskID=e5545142be7d2e774030a5450db31dz120211123 HTTP/1.0 200 0" 0.028741 curl/7.79.1
6.Win7系统快速查看端口号和pid进程号:
在Windows下使用beego调试golang程序时,突然出现如下问题:
ListenAndServe: net.Listen error: listen tcp :8903: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 36672
该提示是在端口冲突的时候出现,可能的原因是在服务器程序中创建一个Socket打开一个端口后,在程序结束的时候没有关闭这个Socket,因此下次启动程序就会出现这个错误提示,解决方法:
1、在服务器程序结束的时候要关闭Socket
2、或者更换端口号
3、重启机器
这里使用第一种方式,通过命令行关闭对应端口,linux下的关闭端口的命令不叫简单,
lsof -i:8903 // 找到那些进程在使用8903端口
kill -9 pid // 杀掉8903端口对应的进程id
具体步骤如下:
①按下Win+R键,输入CMD,打开命令行。
②在CMD窗口中输入netstat -aon | findstr Port,Port表示要查看的端口号,该命令会列出该端口对应的进程ID,也即pid。
以80端口为例,命令为:netstat -aon | findstr 8903,命令行及结果如下:
C:\Users\xxx>netstat -aon | findstr 8903
TCP 0.0.0.0:8903 0.0.0.0:0 LISTENING 29868
TCP [::]:8903 [::]:0 LISTENING 29868
③知道了进程ID为29868,只需要查出29868是哪个程序就可以了。 继续输入以下命令:tasklist | findstr 29868找对对应的进程,29868就是之前的进程ID。
④关闭对应的进程
C:\Users\xxx>taskkill /F /IM httpd.exe
SUCCESS: The process "main.exe" with PID 29868 has been terminated.
⑤查看端口8903使用状态
netstat -aon | findstr 8903
C:\Users\xxx>netstat -aon | findstr 8903
C:\Users\xxx>
参考