本文共 3855 字,大约阅读时间需要 12 分钟。
/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
// 该文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致Z91:/proc # cat statcat stat【第一行】cpu 10986698 461191 6973833 18392057 14380 0 13792 0 0 0cpu0 2979270 114716 1953131 16232623 13661 0 3698 0 0 0cpu1 2942761 116427 1876644 702278 228 0 3423 0 0 0cpu2 2629212 114251 1639567 717985 250 0 3449 0 0 0cpu3 2435454 115796 1504490 739170 241 0 3221 0 0 0intr 497972353 0 0 114727036 0 0 51390375 11248 0 1 0 110907 0 0 63628 0 0 0 0 0 0 67 0 0 0 0 673409 0 0 709 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7731 0 0 0 0 0 0 0 0 0 0 00 40 0 0 0 2 0 226026 0 0 0 0 0 0 74813 288 0 0 2208919 0 0 0 0 0 675250 4252472 27956 0 0 0 18 0 0 0 11740 3456 11394777 10510299 0 0 0 0 3310034 0 2662785 0 490866 1124030 4792262 0 4309958 0 0 0 0 0 0 4162101 4309750 57256 0 681 18289610 0 75835 0 20541 0 0 0 0 0 10 133443 0 0 0 1579819 0ctxt 718173363btime 1515467835processes 488766procs_running 3procs_blocked 0softirq 195036376 95295 78945733 51458 840637 35071 35071 80176 50194210 0 64758725============================================================上述中的第一行可以进行 CPU 运行总时长【第一行】cpu 10986698 461191 6973833 18392057 14380 0 13792 0 0 0
【第一行】cpu 10986698 461191 6973833 18392057 14380 0 13792 0 0 0
1. user (10986698) 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。 2. nice (461191) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间 3. system (6973833) 从系统启动开始累计到当前时刻,处于核心态的运行时间 4. idle (18392057) 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait (12256) 从系统启动开始累计到当前时刻,IO等待时间 5. irq (14380) 从系统启动开始累计到当前时刻,硬中断时间 6. softirq (0) 从系统启动开始累计到当前时刻,软中断时间 7. guest(13792) which is the time spent running a virtual CPU for guest operating systems under the control of the Linux kernel 8. 总的cpu时间 totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen + guestpackage com.fadisu.cpurun.util;import android.os.Process;import android.util.Log;/** * ReadCpuProcFile analysis */public class ReadCpuProcFile { private static final String TAG = ReadCpuProcFile.class.getSimpleName(); // ReadCpuProcFile probe private static final int[] SYSTEM_CPU_FORMAT = new int[]{ Process.PROC_SPACE_TERM | Process.PROC_COMBINE, Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 1: user time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 2: nice time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 3: sys time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 4: idle time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 5: iowait time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG, // 6: irq time Process.PROC_SPACE_TERM | Process.PROC_OUT_LONG // 7: softirq time }; private static long mTotalCpuTime ; private static long mUserStart; private static long mSystemStart; private static long mIdleStart; private static long mIrqStart; public static void getTotalCpuTime() { long[] sysCpu = new long[7]; if (Process.readProcFile("/proc/stat", SYSTEM_CPU_FORMAT, null, sysCpu, null)) { mUserStart = sysCpu[0] + sysCpu[1]; mSystemStart = sysCpu[2]; mIdleStart = sysCpu[3]; mIrqStart = sysCpu[4] + sysCpu[5] + sysCpu[6]; mTotalCpuTime = mUserStart + mSystemStart + mIdleStart + mIdleStart + mIrqStart; Log.d(TAG, "TotalCpuTime = " + mTotalCpuTime); } }}
转载地址:http://aocti.baihongyu.com/