Linux系统资源获取并写入数据库

本文介绍了如何通过C++和shell脚本实时获取Linux系统资源,包括CPU使用率、磁盘空间、内存使用率、网络流量等,并将数据写入数据库。详细列举了各脚本的功能,并解析了获取CPU使用率的原理。
摘要由CSDN通过智能技术生成

一、说明:

       之前在做srs流媒体压测时,系统资源相关的数据查看不方便,于是就使用C++ 加上shell脚本,实时获取Linux系统资源情况并将数据写入到数据库中。


二、脚本目录介绍:

     流媒体服务器(172.18.152.*3)

     脚本目录介绍:
     /root/GetSystemInfo    //脚本目录
     GetSystemInfo.cpp      //主程序
     cpurate.sh                   //获取cpu使用率
     getsize.sh                    //获取磁盘空间
     memrate.sh                 //获取内存使用率
     network_recev.sh        //获取网络接收流量
     network_send.sh         //获取网络发送流量
     getonline.sh                //获取在线个数
     runtest.sh                    //编译并运行主程序


     推流端(172.18.152.*6)

     脚本目录介绍:
     /root/                                //目录
     kill_rtmp_pid.cpp              //调用GetPidAndKill.sh脚本
     GetPidAndKill.sh               //获取pid并杀掉
     rtmp_publish_test.sh        //开始推流脚本
     runtest.sh                         //编译并运行kill_rtmp_pid.cpp


     拉流端(172.18.151.*4)  

     脚本目录介绍:
     /root/                                //目录
     kill_rtmp_pid.cpp              //调用GetPidAndKill.sh脚本
     GetPidAndKill.sh               //获取pid并杀掉
     rtmp_load_test.sh             //开始拉流脚本
     runtest.sh                         //编译并运行kill_rtmp_pid.cpp



三、系统资源的获取

        1、  cpu使用率获取:
        原理是读取系统的 (/proc/stat)文件,然后再提取出想要的数据,再对其进行计算,如图:

        

     

第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下面对各项参数进行解释说明:

      user (1581512)
      从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程。

       nice (9124)
      从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间

Linux环境下,使用C语言监控数据库写入速率通常涉及定时读取数据库的相关性能指标并显示出来。这提供一个简单的示例,它假设我们正在处理SQLite数据库,因为SQLite有直接的API可以获取写入速度信息。请注意,实际应用中可能需要根据使用的数据库系统(如MySQL、PostgreSQL等)调整。 ```c #include <stdio.h> #include <sqlite3.h> #include <time.h> #define DB_FILE "your_database.db" #define PRINT_INTERVAL_SECONDS 5 // SQLite3函数回调,用于存储写入操作的时间戳 static int write_callback(void *not_used, char const *msg) { time_t now = time(NULL); printf("Database Write Rate (last %d sec): %.2f writes/s\n", PRINT_INTERVAL_SECONDS, 1.0 / PRINT_INTERVAL_SECONDS); return sqlite3_reset((sqlite3_stmt *)msg); } int main() { sqlite3 *db; int rc; // 初始化SQLite3库 rc = sqlite3_open(DB_FILE, &db); if (rc != SQLITE_OK) { fprintf(stderr, "Error opening database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } // 创建查询写入操作次数的SQL语句 static const char *sql = "pragma journal_mode; SELECT count(*) FROM sqlite_stat1 WHERE name = 'write'"; sqlite3_stmt *stmt; rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); if (rc != SQLITE_OK) { fprintf(stderr, "Error preparing statement: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } // 开始计时并定期打印写入速率 time_t start_time = time(NULL); while (true) { rc = sqlite3_step(stmt); if (rc == SQLITE_ROW) { unsigned long long writes = sqlite3_column_int64(stmt, 0); double rate = writes / ((double)(time(NULL) - start_time)) / PRINT_INTERVAL_SECONDS; sqlite3_reset(stmt); write_callback(NULL, stmt); // 调用我们的回调函数 } else if (rc != SQLITE_DONE) { fprintf(stderr, "Error executing statement: %s\n", sqlite3_errmsg(db)); break; } sleep(PRINT_INTERVAL_SECONDS); // 等待一段时间再检查 } // 清理资源 sqlite3_finalize(stmt); sqlite3_close(db); return 0; } ``` 在这个示例中,我们每`PRINT_INTERVAL_SECONDS`秒查询一次数据库写入统计信息,然后计算平均写入速率,并打印到控制台。注意,这个示例假定SQLite的日志模式设置为“wal”(写出日志),这样才能记录写入操作。如果你使用的是其他数据库,可能需要查询不同的性能指标或使用特定的命令行工具来获取写入速率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值