记录学习过程中的点点滴滴
admin
该用户没有分享资料
admin
使用 cron、bash 和 wget 监控 Web 服务器的状态[转载]
三 29th
原文地址:http://www.oschina.net/question/12_45835
比较好的文章,分享下
需求列表:
- 要求是 bash, wget, 以及 “mail” 命令 (sendmail, exim, postfix, 之类)
- 可监控任何 HTTP/HTTPS URL, 检查 “200″ 状态返回
- 检查请求返回时间,用于监控一些慢响应
- 通过 Email 发送异常状态提醒
- 可定制的接收异常信息的邮箱
- 可定制慢响应的时间
- 避免重复发送相同的异常提醒
- 使用简单文本文件作为数据存储,不需要数据库
crontab脚本如下:
*/5 * * * * root /home/username/sitemonitor.sh
sitemonitor.sh脚本如下: 更多 >
在Debian下安装Systemtap方法
三 8th
关于Systemtap的介绍,请移步到 这里 ,是调试内核和分析系统软件瓶颈的利器
今天主要介绍下在debian系统的安装
1. 安装Systemtap
sudo apt-get install systemtap
2. 安装elfutils
apt-get install elfutils
3. 安装kernel debug info包,否则无法追踪内核信息
uname -r #查看内核版本 sudo apt-get install linux-image-2.6.32-5-amd64-dbg # 2.6.32-5-amd64为uname -r的命令输出 sudo apt-get install linux-headers-2.6.32-5-amd64
4. 测试
sudo stap -k -e <code>'probe begin{printf("hello"); exit();}'
具体关于Systemtap语法的使用,请参考下面链接
http://sourceware.org/systemtap/documentation.html
http://www.abc188.com/info/html/wangzhanyunying/jianzhanjingyan/20080417/69732.html
5. 参考文章
1. http://www.ningoo.net/html/2010/use_systemtap_on_ubuntu.html

2011年xiao结
三 7th
今天中期答辩结束,还算比较顺利,离毕业又近了一步。一直没有时间闲下来总结下2011,过年回来直接被拉去封闭开发,上周才放出来,今天总算有时间,简单回顾下2011年吧!
关键词:找工作
找工作必定是2011最重要的事,我从五月份开始准备,八月低开始面试,到十二月份基本结束,历时将近半年,最后结果还算不错吧,由于户口问题,没能去自己想去的公司
我的体会:
1. 尽量提前准备,我是从五月份开始准备的,复习了大概两三个月吧,看各种面试笔试题目,这个很重要,因为当你面到最后你会发现,各个公司的面试题目基本上大同小异,因为本身校园招聘,应聘者基本上没有工作经验,所以就只能是算法或者数据结构题目,具体实际项目方面还是比较少一些。
2. 基础很重要:这个是通过看书来复习的,比如《深入理解计算机系统》,《TCP/IP协议详解》等,这样基本上过笔试应该问题不大
3. 不断总结,不断学习:面试完后,要及时总结面试中的表现,同时及时和同学交流在面试中遇到的题目,特别是那些答的不好的题目,同时也从同学那里获得其他一些面试题目,补充自己的题库,这个最好是用文字记录下来
4. 常逛论坛,比如北邮人,水木,一方面获得招聘信息,一方面可以还有很多面经和笔经的分享
下面准备找工作读的书,分享下:
深入理解计算机系统
编程之美
编程珠玑
Effective C++ 1 2
C++ Primer
Unix环境编程
TCP/IP协议详解
关键词:成长
2011年是我的本命年,24岁了,真的不小了
三月份的时候大姐结婚了,过年的时候,外甥女都出生了! 这一切真的很好快,有时以为自己还是小孩呢,是该让自己慢慢成熟了
加油! 更多 >
模板成员函数为什么不能是虚函数
三 4th
这个问题疑惑好久了,去年找工作时,面试网易游戏就被问到这个问题,没有搞清楚,今天看STL源码分析时,突然想到了,就上网查了,算是把这个问题搞明白了
解释
当前的编译器都期望在处理类的定义的时候就能确定这个类的虚函数表的大小,如果允许有类的虚成员模板函数,那么就必须要求编译器提前知道程序中所有对该类的该虚成员模板函数的调用,而这是不可行的
为什么作者这样说呢?从上面的演示知道,对于一个模板函数,不同的模板参数会产生出不同的函数。这样的话,如果要知道类内包含多少个虚函数,就只能去代码中寻找。这就不单单是多文件的问题,还有RTTI的问题了。
主要是参考了http://blog.csdn.net/jcwkyl/article/details/3771059文章,原来是还是吉大的师兄呢,呵呵
gdb调试程序之监控内存【七】
二 12th
gdb提供awtach rwatch watch来监控调试中变量或者内存的变化
awatch 命令
awtach [expr]
当debugger read或者write该expr时,debugger 停止
rwatch 命令
rwatch [expr]
当debugger read该expr时,debugger停止
watch命令
watch [expr]
当debugger write该expr时,debugger停止
说明:expr可以是变量或者是内存地址
vim使用技巧小结【继续更新】
十二 22nd
笔者在本博客上之前记录了vim相关方面的用法,现在总结下,记录的文章如下:
2. Vim纵向编辑模式的用法
4. vim中两个实用插件doxygen和projects的安装与使用
5. VIM查找替换归纳总结
6. vim编辑多个文件的方法
关于const与volatile笔试题目的分析
十 17th
昨天笔试遇到了关于c++中关于const与const_cast的题目,大概如下:
int main(int argc, char* argv[]) { const int a = 10; int * p = const_cast<int *>(&a); *p = 1; printf("%d %d\n", a, *p); return 0; }
求上述程序的输出结果,正确答案是:10 1
分析如下:
首先可以确定是p和&a的地址是指向同一片内存区域的,理论上来说最后的输出结果应该是1 1
但是为什么会输出a的值为10呢? 猜测应该是const关键字的问题,可能编译器看到a为const型变量,所以在编译期就将所有的a直接替换为10了,这个是编译器做的一个优化,
下面简单的验证下:
直接使用下面的命令来看下编译后的汇编代码,关键部分的汇编如下:
movl %edi, -20(%rbp) movq %rsi, -32(%rbp) movl $10, -12(%rbp) leaq -12(%rbp), %rax movq %rax, -8(%rbp) movq -8(%rbp), %rax movl $1, (%rax) movq -8(%rbp), %rax movl (%rax), %edx movl $10, %esi movl $.LC0, %edi movl $0, %eax call printf movl $0, %eax leave ret
显然%rax中存放的指针p的值,(%rax)代表间接寻址
在调用printf函数之前,将10放入%esi, (%rax)放入到%edx中,显然验证了上述的猜想
关于volatile关键字
如何避免编译器做这方面的优化呢?
一个常用的方法是将变量a加上关键字volatile,代表是”易变,每次都需要从内存中读取,这样上述程序的运行结果就是1 1了
当然修改常量变量的值不是好的编程习惯,尽量还是少用上述用法
近期评论