linux 系统调用 查看cpu使用率, 内存使用率, 磁盘信息
时间: 2024-11-21 11:30:32 浏览: 52
在Linux系统中,你可以通过命令行工具来查看CPU使用率、内存使用率以及磁盘信息。以下是几个常用的命令:
1. **查看CPU使用率**:
- `top` 或 `htop`: 实时显示系统的运行状态,包括各个进程的CPU占用情况。
- `mpstat`: 显示处理器的状态信息,包括平均负载。
- `ps aux` 或 `htop -C`: 列出所有正在运行的进程及其CPU使用率。
2. **查看内存使用率**:
- `free`: 显示物理内存和交换分区的使用情况。
- `vmstat`: 显示虚拟内存统计信息,如内存缓冲区、活跃页面等。
- `htop` 或 `top`: 除了CPU,还会展示内存使用详情。
3. **查看磁盘信息**:
- `df -h`: 显示文件系统空间使用情况,包括总容量、已用空间、可用空间等。
- `du -sh *`: 检查指定目录或文件夹的大小。
- `lsblk` 或 `fdisk -l`: 展示块设备的详细信息,包括磁盘名称、大小、挂载点等。
要得到特定时刻的数据,可以结合 `date` 或 `grep` 进行筛选。如果你需要编写脚本定期监控这些指标,还可以查阅 `sysfs` 或 `procfs` 文件系统。
相关问题
linux 系统c语言 查看cpu使用率, 内存使用率, 磁盘信息
在Linux系统下,可以使用C语言结合系统调用或者库函数来获取CPU使用率、内存使用率以及磁盘信息。以下是相应的操作:
1. **查看CPU使用率**:
- 使用`ps`命令可以直接得到进程的CPU占用情况,例如:
```bash
double cpu_usage = system("ps aux | grep 'your_process_name' | awk '{print $3}'"); // 结果会是一个百分比
```
- 或者使用`sysconf`和`getrusage`系统调用从`/proc/stat`文件获取,但这需要更复杂的处理。
2. **查看内存使用率**:
- 可以通过读取`/proc/meminfo`文件,但通常推荐使用`/proc/vmstat`里的数据,并配合`sysconf`系统调用:
```c
struct rusage usage;
if (getrusage(RUSAGE_SELF, &usage)) {
... error handling ...
}
size_t mem_total = sysconf(_SC_PHYS_PAGES) * getpagesize();
size_t mem_used = usage.ru_maxrss * sizeof(void*);
double mem_usage = (double)mem_used / mem_total * 100; // 百分比
```
3. **查看磁盘信息**:
- `df -h` 命令可以显示磁盘分区的信息,包括总容量、已使用空间等,但在C语言中你需要直接读取磁盘的统计文件,如`/proc/diskstats`,这需要更专业的文件I/O操作。
请注意,以上操作在实际C程序中可能需要处理错误、权限和依赖于正确路径等问题。此外,C语言本身并不提供图形化界面,如果你想要用户界面,可能需要结合其他工具或库来展示结果。
centos7写一个监控系统的shell,要求如下 cpu使用率超过80%(Shell变量配置)并且持续60秒钟(Shell变量配置)以上使用Curl post json方式调用http://aaa.com接口,传入以下JSON信息 服务器ip(Shell变量配置)+当前CPU使用率+持续时间+CPU占用率最高的前3个进程名字以及文件路径 内存使用率超过70%(Shell变量配置)并且持续70秒钟(Shell变量配置)以上使用Curl post json方式调用http://aaa.com接口,传入以下JSON信息 服务器ip(Shell变量配置)+当前内存使用率+持续时间+内存占用率最高的前3个进程名字以及文件路径 硬盘使用率超过90%(Shell变量配置)并且持续90秒钟(Shell变量配置)以上使用Curl post json方式调用http://aaa.com接口,传入以下JSON信息 服务器ip(Shell变量配置)+当前硬盘使用率+持续时间+磁盘占用最大的3个文件以及大小(以KB、GB、TB等为单位,精确到1位小数)和文件路径 脚本持续监控,每隔N秒(Shell变量配置)执行一次,要求直接给出最完美的shell代码
这是一个完整的监控系统的 shell 脚本示例,它满足了您所列出的要求:
```sh
#!/bin/bash
# 配置变量
cpu_threshold=80
cpu_duration=60
mem_threshold=70
mem_duration=70
disk_threshold=90
disk_duration=90
interval=30
api_url="http://aaa.com"
server_ip=$(ip addr show | grep inet | grep -v inet6 | awk '{print $2}')
# 初始化变量
cpu_counter=0
mem_counter=0
disk_counter=0
while true
do
# 获取 CPU 使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 判断 CPU 使用率是否超过阈值
if [ $(echo "$cpu_usage > $cpu_threshold" | bc) -eq 1 ]; then
cpu_counter=$((cpu_counter+1))
else
cpu_counter=0
fi
# 如果 CPU 使用率持续超过阈值
if [ $cpu_counter -ge $cpu_duration ]; then
# 获取 CPU 占用率最高的前 3 个进程
top_cpu_processes=$(ps -eo pid,%cpu,comm --sort=-%cpu | head -n 4)
# 构造 JSON 数据
json_data=$(jq -n \
--arg server_ip "$server_ip" \
--arg cpu_usage "$cpu_usage" \
--arg duration "$cpu_duration" \
--arg processes "$top_cpu_processes" \
'{server_ip: $server_ip, resource: "cpu", usage: $cpu_usage, duration: $duration, processes: $processes}')
# 使用 curl 发送请求
curl -H "Content-Type: application/json" -X POST -d "$json_data" "$api_url"
# 重置计数器
cpu_counter=0
fi
# 获取内存使用率
mem_usage=$(free | awk '/Mem/ {printf("%.2f"), $3/$2*100}')
# 判断内存使用率是否超过阈值
if [ $(echo "$mem_usage > $mem_threshold" | bc) -eq 1 ]; then
mem_counter=$((mem_counter+1))
else
mem_counter=
阅读全文