at的实时监控功能更灵活。
如果只是想看看系统的状态,以上工具都可以。
二:查看某个进程的资源占用信息:
1、top
用来实时显示实时地显示系统中所有进程的资源占用情况。
在没有htop工具的情况下查看系统资源的信息。
按下 c 快捷键将会显示进程的完整命令行参数。
在top命令中按下快捷键盘’c‘之后。
2、ps
主要用来列出系统中所有进程的信息。
例如:运行了某个脚本,查看脚本是否启动
# 运行一个测试脚本
ehigh@ubuntu:~$ bash test.sh &
[1] 21738
# 查看这个脚本是否正常启动
ehigh@ubuntu:~$ ps -ef | grep test.sh
ehigh 21738 14974 0 11:04 pts/19 00:00:00 bash test.sh
3、htop
ttop 命令的一个增强版,可以实时地显示系统中所有进程的资源占用情况。
4、pidstat
实时地显示某个进程的 CPU 使用率、内存占用等。
5、strace
追踪某个进程的系统调用信息,可以捕获和打印出应用程序和内核之间发生的所有系统调用和信号,包括传递的参数和返回值,以及发生的错误。
例如:
# 查看执行某个命令的系统调用信息
strace `ls -l /tmp`
# 查看某个进程的系统调用:查看pid为1435这个进程的系统调用
sudo strace -p 1435
一般可以使用strace工具来查看某个进程读取了哪些文件,进程运行慢,时间都花费在了哪些地方以及系统的调用函数等。
使用场景总结:
- 如果想要查看系统进程和资源的占用情况,就使用top或htop。
- 如果想要追踪某个进程的系统调用,调用耗时等信息就是用strace工具
- 如果只是查看某个进程特定的详细信息,就使用ps工具,想要进行深入分析就是用pidstat工具。
系统调优方法
操作系统:操作系统是一个系统软件,操作系统的作用是管理和控制计算机硬件
内核:内核是操作系统的核心部分,是操作系统管理计算机硬件和软件资源的核心代码。操作系统则由内核和其他系统工具程序共同组成的。例如文件管理器、用户界面、设备驱动程序等。
程序:指的是一组计算机指令和数据,可以被计算机执行。程序是静态的,通常存储在硬盘或其他存储设备中,需要通过操作系统加载到内存中才能运行。
进程:是计算机中正在运行的程序的实例。进程是操作系统中进行资源分配的基本单位。
线程:是进程中的一个执行单元,是操作系统调度的最小单位。
内核空间:内核空间是操作系统的核心部分,是操作系统内核运行的地址空间。内核空间是操作系统独占的,只有内核才能访问这个地址空间。
用户空间:是程序运行的地址空间。用户空间是操作系统分配给应用程序的地址空间,应用程序可以在这个空间中运行和使用系统资源。
进程和程序的关系:首先程序被加载到内存中,没有开始运行的时候,只是一组静态的代码和数据。当程序被操作系统调用并开始执行时,就成为了一个进程。一个进程里面包含了程序代码、数据、寄存器等系统资源,所以每个进程都是一个程序的实体,进程是操作系统中进行资源分配和调度的基本单位。
两个虚拟文件系统:
在Linux中,/sys和/proc是两个不同的虚拟文件系统,里面的信息都是动态生成的,因为这两个目录中的数据信息随着系统状态的变化而变化。这两个文件提供了操作内核数据的接口。
/proc文件系统:主要用于展示进程相关的信息,例如可以查询内核状态和进程信息,例如CPU、内存、网络、硬件等系统信息。
/sys文件系统:则用于展示设备和内核参数的信息。/sys中不包含进程的信息,只有系统的状态和设备信息。
说明:
- 修改了/proc/sys中的参数后可以通过sysctl工具来实现持久化配置。
- 修改了/sys 中的信息不能使用sysctl工具来持久化配置,需要写入到/etc/rc.locl这个文件中实现持久化配置。
例如:echo deadline > /sys/block/sda/queue/scheduler
就需要放到/etc/rc.locl中。
一:限制和控制进程的资源使用
1、ulimit工具
进程资源限制和控制的内容:
- 进程的最大 CPU 时间
- 进程可以使用的最大虚拟内存
- 进程可以使用的最大物理内存
- 进程可以打开的最大文件数
- 进程可以创建的最大子进程数等等
使用ulimit工具进行资源限制的时候有两种方式:
方式一:通过在/etc/security/limits.conf
中修改资源限制,这样设置重启也会生效,可以针对系统中的所有用户或特定用户进行设置。
例如:显示当前用户进程的所有限制信息
ehigh@ubuntu:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited # unlimited表示不限制
scheduling priority (-e) 0
file size (blocks, -f) unlimited #文件的最大大小,一个block=4kb
pending signals (-i) 47424
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 65535 # 一个进程可以同时打开的最大文件数
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096 # 一个用户可以创建的最大进程数。
virtual memory (kbytes, -v) unlimited # 虚拟内存的最大大小
file locks (-x) unlimited
# 如果要查看指定进程的限制信息需要使用-p参数指定进程的pid
# 例如:ehigh@ubuntu:~$ ulimit -a -p 1 表示查看进程为1的进程及其子进程的限制信息
例如:调整当前shell中某个进程的资源限制信息
# 限制当前shell 进程及其子进程的资源信息
-c:设置进程的核心转储文件大小限制,单位为字节。
# 核心转储文件(core dump file)是指在程序崩溃或异常终止时,系统保存的程序内存映像文件,通常用于分析和调试程序崩溃的原因。
# 例如,要将当前进程的核心转储文件大小限制设置为 10MB,可以使用命令:ulimit -c 10000000
-m:设置进程的最大内存限制,单位为 KB。
# 例如,要将当前进程的最大内存限制设置为 1GB,可以使用命令:ulimit -m 1048576
-n:设置进程可以打开的最大文件数。
# 例如,要将当前进程可以打开的最大文件数设置为 2000,可以使用命令:ulimit -n 2000
-u:设置进程可以创建的最大用户进程数。
# 例如,要将当前进程可以创建的最大用户进程数设置为 100,可以使用命令:ulimit -u 100
# 限制指定的进程需要使用 -p 参数
例如:将进程 ID 为 12345 的进程的最大打开文件数限制设置为 1000,命令为: