存档

‘技术杂记’ 分类的存档

Linux System and Performance Monitoring

2014年4月6日 1 条评论

写在前面:本文是对OSCon09的《Linux System and Performance Monitoring》一文的学习笔记,主要内容是总结了其中的要点,以及加上了笔者自己的一些理解。通过总结,一方面是为了加深笔者自己的理解,另一方面也是希望能对有需要的朋友有所帮助。

做为一名服务器开发工程师,经常会有分析系统性能,解决系统性能瓶颈的需求。通常我们所说的性能问题,不外乎就是CPU/Memory/IO/Network这四个方面,这四个方面每个都有各自独特之处,同时也都是相互关联的。下面就分别从这四个方面展开进行介绍。

CPU

基本概念

1. 内核调度的优先级:在Linux系统中,内核scheduler调度资源包括两种:threads(Process是由threads组成)和interrupt,这些被调度的资源是有特定的优先级的,以下从高到底:

  • Interrupts: Interrupt被设备用来通知内核相关的事件,优先级是最高的
  • Kernel(System) Processes:所有的系统进程都是以仅次于Interrupt的优先级被调度的
  • User Processes: 所有的应用程序都是run在用户态空间,以最低的优先级被内核调度
  • 阅读全文…

OAuth in One Picture

2014年1月12日 没有评论

OAuth

近年来,OAuth在各种开放平台的引领下变得非常流行,上图是OAuth协议认证的全过程,图本身已经比较详细,这里不再赘述。 阅读全文…

分类: 技术杂记 标签:

Log4j学习笔记

2013年3月17日 2 条评论

用了三四年的C++,转向Java的怀抱,还是有诸多的不适应。C++中不论多复杂的Server,只要有GDB在手,总感觉debug都不是啥大事,程序运行期间的各种状态,都可以通过GDB轻松的获取到;而到了Java中,总感觉像是被困住了手脚,有力没法使,不知道是我还掌握方法,还是事实确实如此,发现Server端的Java程序,几乎没有什么好的debug的方法。也跟一些用了几年Java的朋友聊过,大多给出的答案都是Log。以前在学校刚开始学C/C++的时候,那时候的debug就是靠printf,基本思想跟Log是一样的, 后来结识了神器GDB之后,就深深地爱上了它。现在用上了Java之后,感觉又一夜回到了解放前。我并不是说Log不重要,相反,在越复杂的系统中,Log的地位越发重要,但是对于debug而言,一点点的加Log, 然后重新编译,布署,效率实在是太低了。对于像Java这样没有GDB这样的神器的语言,Log的地位越发重要,因此像Log4j这样的组件就非常流行,前段时间在弄hadoop中异步log相关的一些事情,就顺便把log4j学习了一下,下面整理了一下log4j相关的一些内容。

1. Log4j online manual
地址:http://logging.apache.org/log4j/1.2/manual.html
本文的大部分内容是参考了这个manual,外加一些其他人的博客。
阅读全文…

python MySQLdb连接mysql失败

2012年6月1日 6 条评论

最近了解了一下django,数据库选用了mysql, 在连接数据库的过程中,遇到一点小问题,在这里记录一下,希望能够对遇到同样的问题的朋友有所帮助,少走一些弯路。关于django,想在这里也额外说一句。django是很优秀的基于python的web开发框架,对于有python基础的后台程序员,如果有要做一些前台的需求,强烈推荐django。下面言归正传。

  • 1. 问题的现象
  • 下面是连接数据库的代码,用的是python的MySQLdb模块:

    1
    2
    3
    4
    5
    
    db = MySQLdb.connect(host='localhost',
                         port=3306,
                         user='root',
                         passwd='root98',
                         db='mysite')

    下面是运行的时候报的错误: 阅读全文…

分类: 技术杂记 标签: , ,

jQuery and Highcharts

2012年4月3日 没有评论

最近新做的系统刚刚上线,前段时间的努力终于有了阶段性的成果,可以小小的庆贺一下。当然,这只是题外话了,主要目的是为了引入今天的正题——Jquery和Highcharts。在进入正式的内容之前,有必要先简单介绍一下jQuery和Highcharts分别是什么:
jQuery (http://jquery.com)
jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.
(jQuery是一个快速、简洁的Javascript库,它的主要功能是简化Html文档的遍历、事件处理、动画和ajax交互,从而加快web端的开发。jQuery设计的初衷是改变程序员使用Javascript写程序的方式。)

Highcharts (http://www.highcharts.com)
Highcharts is a charting library written in pure JavaScript, offering intuitive, interactive charts to your web site or web application. Highcharts currently supports line, spline, area, areaspline, column, bar, pie and scatter chart types.
(Highchars是一个用纯Javascript写的图表绘制的库,它可以为你的web app提供直观、交互式的图表。当前,用Highcharts可以实现直线图、曲线图、区域图、曲线区域图、柱状图、条形图、饼图、散点图等一系列的图表。) 阅读全文…

让你的Linux终端色彩斑斓!

2012年3月4日 没有评论

做为一名linux后台开发工程师,每天面对着只有黑白两色的linux终端,你是否曾想过,让你的终端也能五彩斑斓起来,让每天的开发生活不再只是黑白那么的单调。只要你能想到,就一定会有实现的办法。接下来,我将一步步为你接开Linux终端显示彩色的神秘面纱。
1. 先照下面的例子,在你的终端操作,来一个直观的印象。

相信细心的朋友通过对比上面的例子,应该能看出上面的例子的一些特点,我在这里就不卖关子了,基本的格式是:

1
echo "< ctrl-v >< escape >[xxmHello world< ctrl-v >< escape >[yym"

其中,xx和yy分别是各种颜色的代码,通过它们可以来控制要显示的色彩的种类。在色彩码前面有三个特殊的字符,一个是< ctrl-v >,一个是< escape >,一个是[,这些都是必须的。 阅读全文…

分类: 技术杂记 标签: , ,

HttpTunnel技术介绍

2012年2月13日 3 条评论

1. 概述

HttpTuunnel(也叫Http隧道,Http穿梭),是这样一种技术: 它用HTTP协议在要通信的Client和Server建立起一条”Tunnel”,然后Client和Server之间的通信,都是在这条Tunnel的基础之上。

HttpTunnel通常被用在受限的网络环境中,比如在NAT环境中的Client,受防火墙限制的环境中的Client等,在这样的环境中,Client不能直接连接到公网(WAN)的Server,这时候就可以通过HttpTunnel技术,来解决上述问题。
2. 原理
阅读全文…

分类: 技术杂记 标签: ,

用google-perftool分析程序的内存/CPU使用

2012年1月3日 3 条评论

最近,用到了google-perftool分析程序的内存和CPU的使用情况,总结一下使用的一些方法和体会,分享给有需要的朋友。首先,说说google-perftool,它是由google开发的用来分析C/C++程序性能的一套工具,这里的性能分析主要包括内存和CPU两个方面,内存分析使用google-perftool所提供的tcmalloc,CPU分析使用它所提供的profiler。下面先分别介绍一下tcmalloc和profiler,然后再给出一些使用的例子,及一些使用时的注意事项。

  • 1. tcmalloc
  • tcmalloc的全称是thread cache malloc,顾名思义,它是带有thread cache的内存管理工具,具体的实现细节这里不做过多的介绍,感兴趣的朋友可以参考google官方提供的文档,或者阅读源码。这里需要注明一下tcmalloc的一些优点,和它所提供的一些分析程序内存使用的一些功能。
    tcmalloc的主要优点有两个方面,一个是内存allocate/deallocate的速度,通常情况下它的速度比glibc所提供的malloc要快;另一个方面是小内存(< =32K)的管理,它的小内存是在thread cache里面管理的,一方面减少了加锁的开销,另一方面用来表示小内存所用的额外的空间也比较小,比较节省空间。因此,对于多线程下,经常小内存的allocation/deallocation的程序(尤其多线程下使用STL比较多的程序),可以尝试使用一下tcmalloc。 阅读全文…

    C++类型转换(type cast)详解

    2011年8月7日 4 条评论

    在C中,类型转换相对比较简单,直接加括号强制转即可,不过这样做的后果,就是很难保证类型安全,所以,在C++中,虽然还允许C方式的类型转换,但是已经成为deprecated的方式了,良好的C++编程习惯都不推荐使用C方式的类型转换了。C++提供了类型相对安全的转换方式,本文的主要内容,就是介绍C++中的各种类型转换方式,以及各自用在什么样的场合下,有什么需要注意的地方,帮助大家更好的掌握类型转换,更好的驾驭自己的程序。
    dynamic_cast,static_cast, const_cast和reinterpret_cast在C++中被统称为显式类型转换,在介绍它们之前,有必要介绍一下C++的隐式类型转换。隐式转换,就是不需要什么特殊运算符的转换,它是在变量赋值过程中自动发生的。在C++中,允许的隐式转换,主要包括以下两种方式:

  • 1. 基本类型之间的隐式转换
  • 阅读全文…

    Win7共享笔记本无线网卡上网

    2011年7月24日 5 条评论

    相信很多人跟我遇到过一样的情况,宽带只支持通过modem拨号上网,不支持通过路由器上网,这时候,如果有两台以上的设备要上网的话,就会比较麻烦了。这里介绍一种通过分享笔记本无线网卡来上网的方法,下面是具体的步骤,希望到遇到同样问题的朋友有所帮助:

  • 1. 保证笔记本可以通过有线正常上网,保证笔记本无线已打开且可以正常使用。
  • 2. 分享笔记本的能够连接因特网的适配器, 具体如下图:
  • 阅读全文…

    分类: 技术杂记 标签: ,

    JSON学习小结

    2011年6月5日 4 条评论

    1. 什么是JSON?
    JSON的全称是JavaScript Object Notation, 是一种轻量级的数据交换格式。就像XML一样,JSON也是一种比较常见的数据交换的语言,或者称之为数据交换格式更为贴切。
    2. JSON中的数据结构有下面两种:
    (1)对象(Object): 一系列name/value对的集合
    (2)数组(Array): 一系列有序的values的列表
    3. JSON中基数的数据类型有下面几种:
    (1)对象(Object): 对象是一系列无序的“name/value”集合,如下图所示,对象以'{‘开始,以’}’结束,name和value之间由’:’分隔,多个name/value对之间由’,’分隔。
    阅读全文…

    C++ Complete Type

    2011年1月26日 1 条评论


    刚看到上面的代码,相信很多朋友会疑惑,上面那个enum是干什么用的呢?不急,且听我一一道来。这里,”enum {type_must_be_complete = sizeof(C)}”的作用是为了防止C只有声明、没有定义,也就是为了确保C是完整的类型。为什么会这样呢?
    这是因为,在C++中,类型有Complete type和Incomplete type之分,对于Complete type, 它的大小在编译时是可以确定的,而对于Incomplete type, 它的大小在编译时是不能确定的。所以,上面的代码中,如果C是Incomplete type的话,sizeof就会在编译时报错,从而达到了我们检查C是否是Complete type的目的。
    那么,如何来区分Complete type和Incomplete type呢?msdn中是这样定义Incomplete type的: 阅读全文…

    linux程序分析工具介绍(一)—-“/proc”

    2011年1月4日 7 条评论

    写在最前面:在开始本文之前,笔者认为先有必要介绍一下linux下的man,如果读者手头用linux系统,直接在终端输入man man便可以看到详细的说明,我在这里简单的总结一下,man命令是用来查看linux下各种命令、工具等的用户手册(manual)的。一种比较常用的用法是”man n field”,这里的n是要查找的手册了类型,field是关键字。在这里介绍一下n:

  • 0 /usr/include下的头文件
  • 1 可执行程序和shell命令
  • 2 系统调用
  • 3 系统库函数
  • 4 /dev下的特殊文件
  • 5 文件格式和约定(比如/etc/passwd)
  • 阅读全文…

    分类: 技术杂记 标签: , , , , ,

    Http/Ftp多线程下载、断点续传

    2010年12月18日 4 条评论

    写在最前面,本文面向的读者群体是对Http/Ftp协议有一定了解的,如果对Http/Ftp协议不熟的朋友,读先阅读相关RFC文档,下面是Http和Ftp的官方RFC文档地址:
    1. Http RFC2616: http://www.faqs.org/rfcs/rfc2616.html
    2. Ftp RFC959: http://www.faqs.org/rfcs/rfc959.html
    上述文档是e文的,如果e文基础不好的朋友,可以给我留言,索求中文版的文档进行学习。

    我们平时用到的下载器,比如迅雷,QQ旋风,网际快车等,都支持Http/Ftp的下载,用过这类下载器的朋友,应该对多线程下载,断点续传这两个概念不会感到陌生。多线程下载,目的是为了加快整体的下载速度;断点续传,目的了为了避免由于网络不稳定等因素造成的重复下载。“见过猪跑的未必吃过猪肉”,用过下载器的未必了解下载器的工作原理,下面我将来帮大家揭开常见下载器中最为重要的多线程下载和断点续传的神秘面纱。 阅读全文…

    chrome web store初体验

    2010年12月8日 9 条评论

    这两天,Google chrome OS终于在万众瞩目下千始万唤始出来了, chrome web store也随之一起推出,第一时间尝了尝鲜,在这里谈一下我自己的一些体验感受。从google官方的宣传视频可以看出,对于使用惯了chrome浏览器的朋友,chrome OS应该是十分亲切的,因为chrome OS的所有操作,都是在chrome浏览器中完成的,只要有一个google的帐号,便可畅游chrome OS的世界。当然,如果仅仅是这个样子,做一个像chrome浏览器界面的OS,是没有啥意思的,google是不会让广大G粉失望,于是就有了chrome web store。我个人觉得chrome web store才是chrome OS的真正的灵魂之所在,如果chrome OS没有chrome web store, 就如同iphone没有apple app store一样。虽说现在手头上还没有chrome OS的设备,但在chrome浏览器上已经可以体验到chrome web store了,地址为:https://chrome.google.com/webstore, 如下图所示:
    chrome web store 阅读全文…