ps 命令用来列出系统中当前运行的那些进程
# 查找对应程序的进程
ps -ef|grep mysql
# 将所有的程序显示出来
ps aux
pstree 命令以树状图显示进程间的关系
# 常用与统计当前系统有多少线程在运行,系统慢,io较高时使用,可以看哪个程序开启的线程多
pstree -p |wc -l
pstree -p 进程号 |wc -l
ulimit 为进程及其子进程的资源使用设置限制
如果log中出现无法创建线程的异常,可以查看下,一般appuser的默认值都不高
# 查看资源限制
sh-4.2$ ulimit
unlimited
sh-4.2$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31151
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536 打开文件数
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192 # 当前用户栈最大8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096 #当前用户最大进程4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
在启动脚本里
#/bin/sh
ulimit -u 128 # 设置最多启动128进程
ulimit -n 256 # 设置文件句柄数不超过256个
start.sh
修改用户的限制
# centos中设置
vim /etc/security/limits.d/*-nproc.conf
appuser soft nproc 10240
appuser hard nproc 10240
appuser soft nofile 10240
appuser hard nofile 10240
#soft 指的是当前系统生效的设置值
#hard 表明系统中所能设定的最大值
# noproc 是代表进程数、nofile 是代表文件打开数
stack表示堆栈大小,cpu 表示占用的 cpu 时间
top 命令
top - 14:33:59 up 140 days, 17:08, 1 user, load average: 0.36, 0.14, 0.08
Tasks: 193 total, 1 running, 192 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8008868 total, 178140 free, 6977448 used, 853280 buff/cache
KiB Swap: 8257532 total, 7999996 free, 257536 used. 517908 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19461 root 20 0 5871784 1.1g 7208 S 1.0 14.1 55:03.21 java
26092 root 20 0 5958732 498696 8656 S 1.0 6.2 67:17.80 java
7492 gdm 20 0 753896 44568 2848 S 0.7 0.6 844:55.38 gsd-color
26790 appuser 20 0 1344164 222596 8444 S 0.7 2.8 19:43.57 node
9 root 20 0 0 0 0 S 0.3 0.0 22:03.45 rcu_sched
8986 root 20 0 5720692 935004 6992 S 0.3 11.7 44:15.39 java
18945 appuser 20 0 6023192 2.4g 8476 S 0.3 31.1 32:35.86 java
# 综合信息
- 14:33:59 当前时间
up 140 days, 17:08 系统运行了 140天,17小时08分钟
1 user, 当前登录用户数
load average: 0.36, 0.14, 0.08 系统负载
0.36 近1分钟的负载
0.14 近5分钟的负载
0.08 近15分钟的负载
一般能从这个负载看出来系统的情况,逐步上升,说明系统负载高,一般是并发量大或者刚启动项目(没加白名单,或者网不同,导致阻塞,cpu彪高)
# 进程信息
Tasks: 193 total, 193个进程总数
1 running, 正在运行的 运行的越多,cpu利用率越高
192 sleeping, 休眠的 不影响cpu
0 stopped, 停止的
0 zombie 僵尸进程
# cpu信息(可以按核心展示)
%Cpu(s):
0.7 us, 用户空间占用cpu百分比
0.3 sy, 内核空间占用cpu百分比
0.0 ni, 进程优先级改变占用cpu的百分比
99.1 id, 空闲cpu百分比
0.0 wa, 等待输入输出的cpu占用百分比
0.0 hi, 硬件中断占用cpu百分比
0.0 si, 软件中断占用cpu百分比
0.0 st 虚拟机占用百分比
# 内存信息
KiB Mem : 内存的单位
8008868 total, 物理总内存
178140 free, 空闲内存
6977448 used, 使用的物理内存
853280 buff/cache 用于内核缓冲区的内存量
KiB Swap:
8257532 total, 交换区总量
7999996 free, 空闲的交换区总量
257536 used. 已使用的交互区总量
517908 avail Mem 缓冲区的总量
内存&磁盘使用查看
# 查看内存使用,m表示MB显示(服务器内存报警后查看)
free -m
# 当前目录的大小,并按从大到小排序
du -sh *|sort -rh
B K(1024) M(mb) G(gb) T(tb)
s 算总量
h 表示以1000为基底计算大小
--max-depth=N 计算深度
# 显示磁盘使用情况
df -h
日志检索
-
tail 命令
-
head 命令
-
cat 命令 使用也得注意,最好加|more
-
grep 命令 常和别的命令组合, 正则匹配还是很强大的
-
vim 命令(文件太大,占内容,容易把服务器搞崩,慎用)
# 查看文件末尾最后20行,并实时监听(f循环读取),上线后查看验证
tail -fn 20 5ycode_access.log
f 循环读取
n 读取多少行
# 查看文件的前10行(有时候查看动是输出了什么,有用)
head -n 10 5ycode_access.log
n 读取多少行
v 显示标题
# 翻页查看内容
cat 5ycode_access.log |more
按回车一页页的查看
# 从某个文件中搜索关键字,并一页页的显示
grep "article" 5ycode_access.log |more
# 从当前目录中搜索
grep "article" ./* |more
i 忽略大小写
v 取反
n 显示行号
--clolor 匹配的内容高亮显示
-A n after的简写 表示显示匹配到的字符串所在行以及其后n行
-B n before 表示显示匹配到的字符串所在行以及其前n行
-C n context 上下文,表示显示匹配行以及其上下n行
# 从文件的后两万行中检索Exception 并显示对应的后20行(方便检索异常)
tail -fn 20000 error.log |grep 'Exception' -A 20
vim my.ini
vim命令看这张图就行了(忘了从哪找的了)
后端启动 nohup
nohup mqnamesrv 1>/usr/local/rocketMq/logs/out.log 2>/usr/local/rocketMq/logs/error.log &
nohup java -jar /app/eureka/eureka-server-0.0.1-SNAPSHOT.jar > /app/eureka/nohup.out 2>&1 &
操作系统中有三个常用的流:
0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr
> /app/eureka/nohup.out 实际是 1 >/app/eureka/nohup.out 的简略写法
< nohup.out ,实际是 0 < nohup.out
> /app/eureka/nohup.out 2>&1 &
2>&1是将标准错误流stderr2重定向到标准输出流(&1),标准输出(&1)再被重定向输入到nohup.out 文件中
最后添加的&表示命令结束
awk 拥有自己的语言,允许创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能
# 统计接口出现的次数
awk -F'[ ?]' '{print $7} localhost_access_log.2018-02-12.txt |sort |uniq -c
# 统计链接10.255.200.214:22 的ip前20个
netstat -nat | grep "10.255.200.214:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
- 先以空格分隔取第5个字符串
- 再以: 分隔取第一个字符串
- sort 排序
- uniq -c 去重统计
# 统计3306 端口的TCP状态
netstat -n |grep 3306| awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
- 先过滤tcp
- 以最后一位构建数组(AWK 中的数组都是关联数组,数字索引也会转变为字符串索引)
- END 最后将数组输出
# 只打印第10行的行号
tail -fn 20 5ycode_access.log | awk '{if (NR==10) print NR}'
# 同时以" "和: 分隔 输出$4和$5 以" " 拼接
tail -fn 20 5ycode_access.log | awk -F'[ :]+' '{print $4" "$5}'
-
awk 默认是 以 " " 去分隔字符串分隔,然后就是数组的处理$0~$n去取数
-
awk 可以通过 -F 指定分隔方式,可以指定多个
内置函数: awk 正则
rz &sz 文件上传与下载
yum install rz sz
sz file 执行后,会弹出让你保存文件的路径
rz 执行该命令后,在弹出框中选择要上传的文件即可
linux之间文件传输
scp方式需要密码
scp -r 文件 user@ip:目录
scp -r jdk-8u251-linux-x64.tar.gz root@10.255.200.215:/usr/local/java/
输入密码
nc 方式不需要密码
# 接收端先开启命令接收文件
nc -l ip port > 文件名
nc -l 127.0.0.1 9999 > jdk-8u251-linux-x64.tar.gz
# 发送端发送对应的文件
nc ip port < 文件名
nc 127.0.0.1 9999 < jdk-8u251-linux-x64.tar.gz
防火墙操作
查看防火墙状态
firewall-cmd --state
查看域
# 查看active域
firewall-cmd --get-active-zones
# 查看当前域
firewall-cmd --get-default-zone
#查看网卡对应的域
firewall-cmd --get-zone-of-interface=ine0
查看开放端口
# 查询开放了哪些端口
firewall-cmd --zone=public --list-ports
# 查询80端口有无开放
firewall-cmd --query-port=80/tcp
添加开放端口
# 往对应的zone中添加端口
# 8000-9000表示的是一个范围
# tcp udp
firewall-cmd --zone=public --add-port=8000-9000/tcp --permanent
# RunTime:当前正在生效的。
# Permanent:永久生效的。
# 配置立即生效
firewall-cmd --reload
关闭端口
firewall-cmd --permanent --zone=public --remove-port=8848/tcp
关闭防火墙
systemctl stop firewalld.service
# 禁止开机启动
systemctl disable firewalld.service
在public域中分别查询ssh与http服务是否被允许
firewall-cmd --zone=public --query-service=ssh
firewall-cmd --zone=public --query-service=http
允许https服务流量通过public区域,要求立即生效且永久有效
# 设置当前有效,如果加上--permanent 则永久有效
firewall-cmd --zone=public --add-service=https
# 让立即生效
firewall-cmd --reload
# 不再允许http访问
firewall-cmd --permanent --zone=public --remove-service=http
对指定ip开放服务
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="172.17.0.1/16" port port="3306" protocol="tcp" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept"'
端口转发
firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.0.100
netstat命令
#常用参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
# 查看端口监听
netstat -lnpt
netstat -lnpt |grep 8080
# 查看TCP链接的状态,比如链接数据库,或者服务链接处在状态
netstat -n |grep 3306| awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
CLOSE_WAIT 348
ESTABLISHED 1240
TIME_WAIT 5621
# 同上
netstat -nat |grep 22|awk '{print $6}'|sort|uniq -c|sort -nr
# 统计链接服务器22端口按链接数倒序排,取前20个
[root@dev214 bin]# netstat -nat | grep "10.255.200.214:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
3 10.203.0.57
2 10.255.255.247
# 统计nginx access中前20个访问
awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10
解决大量TIME_WAIT( 操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接) vim/etc/sysctl.conf
#编辑文件,加入以下内容:
net.ipv4.tcp_syncookies =1#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse =1#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle =1#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout=30#修改系統默认的 TIMEOUT 时间。
然后执行以下命令让参数生效 /sbin/sysctl -p
sort
-r 降序显示,默认是升序
-u 去除重复行
-n 以数值排序
jstack
# 将java栈信息输出到对应的文件,如果出现的BLOCKED比较多就会有问题,RUNNABLE比较多也有可能是有慢操作。
jstack pid > pid.log
jmap 命令
一般直接jmap,有对应的额示例