异想天开

What's the true meaning of light, Could you tell me why

dmesg 暂作备忘

日期:2014-10-15 16:12:19
  
最后更新日期:2015-06-26 10:03:08
【技术】
本来不想发文的,主要是水文太多,想静心修炼下。表以水文,权为备忘。此文的契机为查找dmesg error number的意思。贴出如下:
[code lang="cpp"]
/*
* Page fault error code bits
* bit 0 == 0 means no page found, 1 means protection fault
* bit 1 == 0 means read, 1 means write
* bit 2 == 0 means kernel, 1 means user-mode
* bit 3 == 1 means use of reserved bit detected
* bit 4 == 1 means fault was an instruction fetch
*/
#define PF_PROT (1<<0)
#define PF_WRITE (1<<1)
#define PF_USER (1<<2)
#define PF_RSVD (1<<3)
#define PF_INSTR (1<<4)
[/code]
追踪该问题的原由发现还是程序写了线程不安全的函数,导致读写内存出错。虽然原始代码不是我写的,但还是有必要警惕。所以修炼还是必须的。工作一年有余,大多长的知识为对价值的判断标准,比如怎么判断一个程序好坏。单性能抽象,不涉及业务,粗浅导出看法。
1.cpu利用率。跑满cpu为好,闲置cpu就是浪费。利用sar -u 2 5命令查看cpu利用等方面的参数信息。
2.带宽跑上。利用sar -n DEV命令可以查看网卡方面统计信息。
3.磁盘io。利用sar -b 1 3命令,间隔1s,3次调用,统计平均值。
4.代码需要严格测试。有覆盖测试,容错测试,压力测试。 补充:
容错测试,就是看程序对异常情况的hold能力。记录出错信息,然后exit即可。否则就只有利用core文件。怎么测试容错?可以hook掉api,比如malloc内存分配失败的情况,可以这样,写一个库优先加载:
[code lang="cpp"]
#test_ldd.c
#define NULL (void*)0
#define _GNU_SOURCE
#include<dlfcn.h>

void *malloc(size_t size)
{
return NULL;
}
[/code]
编译命令:
[code lang="cpp"]
gcc -c -fpic test_ldd.c
gcc -shared test_ldd.o -o test_ldd.so
[/code]
然后这样执行,test为任意包含内存分配的程序。同理还可以测试网络read等函数异常情况。
[code lang="cpp"]
ulimit -c unlimited
LD_PRELOAD=./test_ldd.so ./test
[/code]
参考1:
http://blog.chinaunix.net/uid-20357359-id-1963702.html