top命令
top -c: 在top命令显示界面显示出完整的进程名和启动参数
top -H: 在top命令中显示所有的线程状
top -p pid: 这个pid可以是进程pid,也可以是线程pid(进程的pid就是该进程主线程的pid), 该命令实际显示的是该线程所属进程的状态.
top -H -p pid: pid是一个线程号, 该命令列出该线程所属进程的所有线程的状态
gstack 参看进程堆栈
gstack pid:
1. pid是进程号时(主线程号),显示进程当前所有线程的调用堆栈
2. pid是线程号时(非主线程号), 显示当前线程的调用堆栈
gstack是实时的, 某个时刻的堆栈显示只是这个时刻的堆栈调用情况
rdtsc CPU clock计数
typedef struct CPUUsage
{
double m_cycles; /* number of cycles */
} CPUUsage;
static inline unsigned long rdtsc(void)
{
unsigned int hi = 0;
unsigned int lo = 0;
asm volatile("rdtsc" : "=a"(lo), "=d"(hi));
return ((unsigned long)lo ) | (((unsigned long)hi) << 32);
}
static void
CPUUsageGetCurrent (CPUUsage *cur)
{
cur->m_cycles = rdtsc ();
}
static void
CPUUsageAccumDiff(CPUUsage *dst,
const CPUUsage *add,
const CPUUsage *sub)
{
dst->m_cycles += add->m_cycles - sub->m_cycles;
}
可以用于CPU计数, 一个时钟周期,CPU计数就加1, 通过计算两个点之间的CPU计数的差值, 就可以得出两个点之间的时间(计数差值/CPU频率).
问题:
1. 当CPU处于省电模式时, CPU频率可能跳变, 时间不准---- >解决方法: 关闭CPU省电,让CPU频率不变
2. 多核CPU时, 进程可能在不同CPU之间跳变, 如果CPU之间的时钟计数器不同步,计数差值会错误---->解决方法:
1):关闭CPU省电,同步CPU之间的计数(貌似很困难)
2):将进程与CPU绑定
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)