linux服务器监控
目的
发现服务器性能瓶颈.
服务器配置的不同,能承载的任务和压力也是不同的.
性能指标
cpu
计算速度能力
内存
数据临时存放位置
磁盘
数据存储位置
网络
数据传动带
版本
性能改进.
我们保证不了测试环境和生产环境的性能一样,但是要保证系统版本一样.
性能损耗
实际性能和预估性能差异.
进程与线程
进程: 具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位. 例如打开浏览器.
线程:是进程的一个实体.是cpu调度和分配的基本单位.它是比进程更小的能够独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源. 一个线程可以创建和车险另一个线程.
区别
一个线程只能属于一个进程. 而一个进程可以拥有多个线程.
线程是进程工作的最小单位.
一个进程会分配一个地址空间,进程与进程之间不共享地址空间,即不共享内存.
同一个进程的不同的多个线程,共享父进程的地址空间.
线程在执行过程中,需要协作同步,不同进程的线程间要利用消息通信的办法实现同步.通常用锁实现.
线程作为调度和分配的基本单位,进程作为拥有资源的基本单位.
优缺点
进程优点
进程互相独立,不影响主程序的稳定性,子进程崩溃不影响其他进程.
通过增加cpu,扩充性能,多核心多线程.
尽量减少线程加锁与解锁的影响,可以极大的提高性能.
进程缺点
扩机控制复杂,需要和主程序交互
多进程调度开销大.
线程优点
程序逻辑和控制方式简单
所有线程可以直接共享内存和变量等.
消耗的资源相对较少.
线程缺点
每个线程与主程序共有地址空间,最大内存地址受限.
线程之间的同步和加锁不易控制.
一个线程的崩溃可能影响到整个程序的稳定性.
linux常用监测命令
man
linux 下的函授手册命令,可以查看所有命令使用方法
例如 man ls
top
-h: 帮助
-p: 监控指定进程.多个的时候用逗号分隔.这个命令只能在命令行使用.
M:按照内存使用率倒序
P:按照cpu使用率倒序
z:彩色/黑白显示.
运行 top
后按M键或者P键或者z键.
load average:1分钟,5分钟15分钟的平均负载
评价负载情况: 单核cpu情况load average为1表示满负荷,同理,多核cpu满负载的load average的值为1*cpu核数.
# 查看cpu核数
cat /proc/cpuinfo | grep 'processor' | wc -l
vmstat
监控进程状态,内存,磁盘,cpu等
-S:使用指定单位显示.
参数有k, K, m, M
分别是1000,1024,1000000,1048576字节(byte),默认是K
vmstat 1 表示一秒钟打印一行监控
vmstat 5 2 表示五秒钟打印一次监控,一共打印两次
这样就事实监控了.
free
监控内存使用状态
total:总计物理内存大小
used:已用
free:可用
shared:多个进程共享的内存
buff/cache:磁盘缓存大小
free -h
会带上单位
mpstat
实时监控cpu.
查看多核心cpu每个核心的统计数据
要是用的先安装
yum install -y sysstat
[root@sixmillions ~]# mpstat -h
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ]
[ -P { <cpu> [,...] | ON | ALL } ]
mpstat -P 核心 表示监控哪个核心,不写默认全部.
mpstat internal 多长时间返回一次结果
mpstat 1 2 监控所有核心,每一秒返回一次,一共返回两次
mpstat -P 1 2 监控核心1,每两秒返回一次结果
mpstat -P 2 3 4 监控核心2,每三秒返回一次结果,一共返回4次
注意第一样是从开机到现在的平均值,所以从第二行开始看就可以.
netstat
实时监控网络
-n 拒绝显示别名,能显示数据的全部转化成数字
-l 仅列出有在Listen(监听)的服务状态,比如tomcat默认监听8080端口.
-p 显示建立相关链接的程序名
-t (tcp)显示tcp选项
-u (udp)显示udp相关选项
-i 显示自动匹配接口的信息
-c 每个一个固定时间 执行该netstat命令
netstat -ntlp
可以查看接口监听状态
netstat -i
netstat -i -c 2 每两秒返回一次
iostat
监控磁盘
# 安装一下
yum install -y sysstat
也可以加时间和测试
iostat -x 2 3 每两秒返回一次结果,返回三次.
万能命令
sar
命令
使用抱错
[root@sixmillions bin]# sar
Cannot open /var/log/sa/sa10: No such file or directory
解决方式
print=$(date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%d")
sar -o $print
进程追踪命令 strace
yum install strace
-p 跟踪指定进程
-f 跟踪由fork子进程系统调用
-c 统计每次嗲用执行时间 次数 和 出错次数
-t 在输出的时候加上时间, -tt 时间精确到微妙
-e 过滤器
-o file 结果输出到文件
监控工具 nmon
http://nmon.sourceforge.net/pmwiki.php?n=Site.Download
wget http://sourceforge.net/projects/nmon/files/nmon16e_mpginc.tar.gz
tar -zxvf nmon16e_mpginc.tar.gz
https://www.jianshu.com/p/7858803b0e18
定时任务
crontab
查看 启动 停止 重启
/sbin/service crond status
/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload 重载配置
[root@sixmillions packages]# /sbin/service crond status
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-16 21:07:40 CST; 3 weeks 2 days ago
Main PID: 25740 (crond)
CGroup: /system.slice/crond.service
└─25740 /usr/sbin/crond -n
Apr 16 21:07:40 sixmillions systemd[1]: Started Command Scheduler.
Apr 16 21:07:40 sixmillions crond[25740]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 69% if used.)
Apr 16 21:07:40 sixmillions crond[25740]: (CRON) INFO (running with inotify support)
Apr 16 21:07:40 sixmillions crond[25740]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
实例1:每1分钟执行一次command
命令:
* * * * * command
实例2:每小时的第3和第15分钟执行
命令:
3,15 * * * * command
实例3:在上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 * * * command
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 */2 * * command
实例5:每个星期一的上午8点到11点的第3和第15分钟执行
命令:
3,15 8-11 * * 1 command
实例6:每晚的21:30重启smb
命令:
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
命令:
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
命令:
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
命令:
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
命令:
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
命令:
* */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
命令:
* 23-7/1 * * * /etc/init.d/smb restart
实例13:每月的4号与每周一到周三的11点重启smb
命令:
0 11 4 * mon-wed /etc/init.d/smb restart
实例14:一月一号的4点重启smb
命令:
0 4 1 jan * /etc/init.d/smb restart
实例15:每小时执行/etc/cron.hourly目录内的脚本
命令:
01 * * * * root run-parts /etc/cron.hourly
说明:
run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了
https://www.cnblogs.com/intval/p/5763929.html