01 2012 档案

摘要:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTMShell脚本编程的常识(这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用)七种文件类型d 目录 l 符号链接s 套接字文件 b 块设备文件c 字符设备文件 p 命名管道文件- 普通文件正则表达式从一个文件或命令输出中抽取或过滤文本时。可使用正则表达式(RE),正则表达式是一些特殊或不很特殊的字符串模式的集合。 基本的元字符集: ^ 只匹配行首。 $ 只匹配行尾。 * 一个单字符后紧跟*,匹配0个或多 阅读全文
posted @ 2012-01-31 13:52 balaamwe 编辑
摘要:现行的Linux distros主流的有两种init方式:一种是广为流传的System V initialization,它来源于Unix并且至今仍被各种Linux distros所采用;另一种是近几年提出的Upstart方式,基于事件机制,系统的所有服务,任务都是由事件驱动的。据我所知,采用后一种方式的目前有Ubuntu(6.10 and later),Fedora(9.10 and later),Debian(optional)。虽然采用Upstart的发行版并不多,但它旨在取代旧式的System V initialization。 作为知识梳理,我现在就先在这里总结一下这两种方式各... 阅读全文
posted @ 2012-01-19 13:28 balaamwe 编辑
摘要:linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。本文中假设inittab中设置的init tree为:/etc/rc.d/rc0.d/etc/rc.d/rc1.d/etc/rc.d/rc2.d/etc/rc.d/rc3.d/etc/rc.d/rc4.d/etc/rc.d/rc5.d/etc/rc.d/rc6.d/etc/rc.d/init.d目录1. 关于linux的启动2. 关于rc.d3. 启动脚本示例4. 关于rc.local5. 关于bash启动脚本6. 关于开机程序的自动启动1. 关于linux的启动init是所有进程的顶层init读取 阅读全文
posted @ 2012-01-19 13:19 balaamwe 编辑
摘要:http://bbs.chinaunix.net/thread-1928306-1-1.html前面的话:linux环境:虚拟机VMware Server上安装的ubuntu10.4,通过putty登录shell。抄书:文件描述符(file descriptor:fd)是个简单的整数,用以标明每一个被进程所打开的文件。可以通过查看/proc/pid/fd/目录查看该进程的fd。先从用户态开始: 编写一个helloworld,运行后通过proc可以看到进程helloworld有三个fd(0,1,2),指向3个设备文件,均为/dev/pts/0。 然后在helloworld中打开一个文件,查看.. 阅读全文
posted @ 2012-01-17 18:26 balaamwe 编辑
摘要:转载自IT168:http://tech.it168.com/a2011/0715/1218/000001218808.shtml 【IT 168专稿】在前面的系列文章中简单评测了HandlerSocket、TTServer、MongoDB、Redis和HBase五款NoSQL产品,本文对评测结果做一下总结。 数据库评测回顾: •主流NoSQL数据库评测之HandlerSocket •主流NoSQL数据库评测之Tokyo Cabinet •主流NoSQL数据库评测之MongoDB •主流NoSQL数据库评测之Redis •主流NoSQL数据库评测之HBase ... 阅读全文
posted @ 2012-01-17 16:29 balaamwe 编辑
摘要:地理位置索引支持是MongoDB的一大亮点,这也是全球最流行的LBS服务foursquare 选择MongoDB的原因之一。我们知道,通常的数据库索引结构是B+ Tree,如何将地理位置转化为可建立B+Tree的形式,下文将为你描述。首先假设我们将需要索引的整个地图分成16×16的方格,如下图(左下角为坐标0,0 右上角为坐标16,16):单纯的[x,y]的数据是无法建立索引的,所以MongoDB在建立索引的时候,会根据相应字段的坐标计算一个可以用来做索引的hash值,这个值叫做geohash,下面我们以地图上坐标为[4,6]的点(图中红叉位置)为例。我们第一步将整个地图分成等大小的 阅读全文
posted @ 2012-01-17 16:19 balaamwe 编辑
摘要:Redis入门教程作者:nosqlfanon 星期五, 七月 23, 2010 ·评论本文【阅读:1,425 次】入门教程,仅供菜鸟。原文链接:http://lgone.com/html/y2010/776.html本文包括如下内容:Redis简介Redis的性能安装Redis、Redis启动参数介绍应用实例:利用Redis构建简单的微博系统(官方例子链接)[注:入门教程,仅供菜鸟]1.Redis简介Redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表 阅读全文
posted @ 2012-01-17 15:40 balaamwe 阅读(366) 评论(0) 推荐(0) 编辑
摘要:Nginx的优点: nginx下载:http://nginx.net/ 性能好,可以负载超过1万的并发。 功能多,除了负载均衡,还能作Web服务器,而且可以通过Geo模块来实现流量分配。 社区活跃,第三方补丁和模块很多 支持gzip proxy 缺点: 不支持session保持。 对后端realserver的健康检查功能效果不好。而且只支持通过端口来检测,不支持通过url来检测。 nginx对big request header的支持不是很好,如果client_header_buffer_size设置的比较小,就会返回400 bad request页面。Haproxy的优点: 它的优点正好可以 阅读全文
posted @ 2012-01-17 13:40 balaamwe 编辑
摘要:http://blog.sina.com.cn/s/blog_502c8cc40100kfz2.htmlHaproxy实现了Map-based和consistenthash算法,来完成通过哈希值选取后端服务器。然而,其与consistent hash方式不同的是,基于map-based的哈希选择算法对由于其中一台后台服务器宕机等情况,都会对之前建立的哈希值与后台服务器之间的映射关系发生改变,不能实现一致性访问。而基于consistent hash算法比较完美地解决了这些问题但在haproxy 1.4.7及之前版本中,如果用户在配置文件中没有为每个server指定id, 那么杯具出现了,hapr 阅读全文
posted @ 2012-01-17 13:38 balaamwe 编辑
摘要:http://blog.tianya.cn/blogger/post_read.asp?BlogID=3001183&PostID=34937939 global 参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改 defaults 配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件 frontend 接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)。 backend 后端服务集群的配置,是真实的服务器,一个Backend对应一... 阅读全文
posted @ 2012-01-17 11:42 balaamwe 阅读(2559) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/mahongming/article/details/6048947简介HAProxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。HAProxy适用于那些负载较大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy可以支持数以万计的并发连接,并且HAProxy的运行模式使得它可以很简单安全的整合进架构中,同时可以保护web服务器不被暴露到网络上。安装与管理安装软件选择说明软件版本haproxy1.4.91)安 阅读全文
posted @ 2012-01-17 11:10 balaamwe 编辑
摘要:http://hi.baidu.com/coolda/blog/item/b9d9e8f87b2be51bd8f9fd7d.htmlHAProxy的安装和部署考虑公司当前服务器的并发量,最终还是选定了HAProxy来实现负载均衡,相较于其他的负载均衡系统,HAProxy的配置和使用还是比较简单的。下面是自己安装和部署haproxy的记录,比较重要的一点是解决了haproxy + syslog-ng的日志输出问题。PS: 这个问题费了我好大神:-|PLATFORM: SUSE Linux Enterprise Server 11 (x86_64)1. haproxy的编译安装获取haproxy的 阅读全文
posted @ 2012-01-17 11:08 balaamwe 编辑
摘要:请按以下操作:1,在启动的时候,上下移动,选中(不是按回车)类似这样的修复模式"Ubuntu-x.x.xx.xx-generic (recovery mode),然后按e。2,在第二层菜单选择有kernel这行,如:"kernel /boot/vmlinux-x.x.xx-xx-generic root=UUID=ae424e-bod0-475c-2342433 ro single" 按下e进行编辑。3,修改启动参数,将后面的ro single改为rw single init=/bin/bash,然后按回车。如:"kernel /boot/vmlinux 阅读全文
posted @ 2012-01-16 18:13 balaamwe 编辑
摘要:摘要:对fork,source和exec三种方式执行shell脚本的总结。准备知识1.我们所执行的任何程序,都是由父进程(parent process)所产生出来的一个子进程(child process),子进程在结束后,将返回到父进程去。此一现像在Linux系统中被称为 fork。当子进程被产生的时候,将会从父进程那里获得一定的资源分配、及(更重要的是)继承父进程的环境﹗2.Shell变量大致可以分为3种类型: 内部变量:系统提供,不用定义,不能修改,比如$#,$?,$*,$0等 环境变量:系统提供,不用定义,可以修改,当前进程及其子进程中使用,比如PATH,PWD,SHELL等 用户变量( 阅读全文
posted @ 2012-01-16 16:22 balaamwe 编辑
摘要:AppendixD.IP Route ManagementTable of ContentsD.1.routeD.1.1. Displaying the routing table withrouteD.1.2. Readingroute's outputD.1.3. Usingrouteto display the routing cacheD.1.4. Creating a static route withroute addD.1.5. Creating a default route withroute add defaultD.1.6. Removing routes wit 阅读全文
posted @ 2012-01-16 15:36 balaamwe 编辑
摘要:$ ls -ld /etc/rc.ddrwxr-xr-x 10 root root 352 2月 13 13:38 /etc/rc.d/$ ls -ld /etc/init.dlrwxrwxrwx 1 root root 11 2月 13 13:38 /etc/init.d -> rc.d/init.d/一个是另外一个的软链接吧etc/rc.d/init.d里面包含了一些脚本,这些脚本供INIT进程(也就是1号进程)在系统从初始化的时候按照该进程获取的开机运行等级,有选择的运行init.d里的脚本。这些一般是系统安装好的软件运行级别,决定了系统启动之后运行于什么级别。这个级别从0到6 , 阅读全文
posted @ 2012-01-16 15:35 balaamwe 编辑
摘要:http://www.cnblogs.com/wuhou/archive/2008/09/28/1301071.html三种安装方式: 1. 从网上安装 sudo apt-get install mysql-server。装完已经自动配置好环境变量,可以直接使用mysql的命令。 注:建议将/etc/apt/source.list中的cn改成us,美国的服务器比中国的快很多。 2. 安装离线包,以mysql-5.0.45-linux-i686-icc-glibc23.tar.gz为例。 3. 二进制包安装:安装完成已经自动配置好环境变量,可以直接使用mysql命令网上安装和二进制包... 阅读全文
posted @ 2012-01-13 18:20 balaamwe 编辑
摘要:调用JMeter的 “jmeter -?”命令将打印所有命令选项的一个列表。列表如下: -h, --help 打印使用信息并退出 -v, --version 打印版本信息并推出 -p, --propfile {argument} 使用的JMeter属性文件 -q, --addprop {argument} 附加的属性文件 -t, --testfile {argument} 运行的jmeter测试文件(.jmx) -l, --logfile {argument} 日志取样文件 -n, --nongui 非用户界面运行JMeter -s, --server 运行JMeter服务器 -H, --pr 阅读全文
posted @ 2012-01-13 17:00 balaamwe 编辑
摘要:1,下载jakarta-jmeter-2.4_src.zip和jakarta-jmeter-2.4.zip解压。2,下载3个jar包,(很重要要不会有n多的错误),分别是mail.jar,jms.jar,activation.jar3, 将jakarta-jmeter-2.4.zip下的lib中的jar包拷到jakarta-jmeter-2.4_src.zip下的lib目录中并加 上下载的三个jar包。并且修改commons-logging1.1.jar为commons-logging.jar。然后在lib目录下新增三个空 文件夹ext,junit,api.(主要是为了对应Jmeter的ecl 阅读全文
posted @ 2012-01-13 16:02 balaamwe 编辑
摘要:http://marshal.easymorse.com/archives/3127jmeter最简单使用jmeter是apache jakarta项目下的测试工具,见:http://jakarta.apache.org/jmeter/可以用来做功能测试,负载测试和压力测试。是服务器端开发必备的测试工具。以前写过比较完整的文档,没有放在博客上,早就遗失了。最近做测试,要写多个日志记录基本的使用。下载jmeter:http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi安装很简单,解压缩即可。jmeter是java编写的,因此要在 阅读全文
posted @ 2012-01-13 13:36 balaamwe 编辑
摘要:publicclassTestYuanextendsAbstractJavaSamplerClient{privatestaticStringlabel="CBCTest";privateStringip;privateStringport;privateStringINSTYPE;privateSampleResultsr;publicvoidsetupTest(JavaSamplerContextarg0){System.out.println("setupTest");}publicSampleResultrunTest(JavaSamplerCo 阅读全文
posted @ 2012-01-13 13:26 balaamwe 编辑
摘要:写了一个多线程的代码,在主线程中申请了一块内存,在另一个线程中释放内存,老出错误,不知道是怎么回事。*** glibc detected *** /home/ydx/vehicle-program/vehicle-v1.0/t: double free or corruption (!prev): 0x080644c8 ***======= Backtrace: =========/lib/libc.so.6[0x7c7261]/home/ydx/vehicle-program/vehicle-v1.0/t[0x804991e]/home/ydx/vehicle-program/vehicle 阅读全文
posted @ 2012-01-12 22:25 balaamwe 编辑
摘要:写了一个多线程的代码,在主线程中申请了一块内存,在另一个线程中释放内存,老出错误,不知道是怎么回事。*** glibc detected *** /home/ydx/vehicle-program/vehicle-v1.0/t: double free or corruption (!prev): 0x080644c8 ***======= Backtrace: =========/lib/libc.so.6[0x7c7261]/home/ydx/vehicle-program/vehicle-v1.0/t[0x804991e]/home/ydx/vehicle-program/vehicle 阅读全文
posted @ 2012-01-12 22:25 balaamwe 编辑
摘要:应用程序:#include <syswait.h>usleep(n) //n微秒Sleep(n)//n毫秒sleep(n)//n秒驱动程序:#include <linux/delay.h>mdelay(n) //milliseconds 其实现#ifdef notdef#define mdelay(n) (\{unsigned long msec=(n); while (msec--) udelay(1000);})#else#define mdelay(n) (\(__builtin_constant_p(n) && (n)<=MAX_UDELA 阅读全文
posted @ 2012-01-12 22:19 balaamwe 编辑
摘要:很多情况下我们需要修改IP地址和DNS等内容,如果是动态的修改,在电脑启动后还要重新设定,非常麻烦,许多网上的资料都不能真正的实现永久性的修改,甚至是错误的,这里将正确的设置内容共享给大家学习,如有转载请注明出处:无名博客http://qinjiana0786.cublog.cn,个人著作《追踪LINUX TCP/IP代码运行》将会由北航出版社于4月中旬出版,希望对爱好网络的朋友们有所帮助。以下内容是在Ubuntu上设置的,同样对其它LINUX系统有效。sudo ifconfig eth0 downsudo ifconfig eth0 hw ether XX:XX:XX:XX:XX:XXsud 阅读全文
posted @ 2012-01-12 22:17 balaamwe 编辑
摘要:http://www.cnblogs.com/chingliu/archive/2011/08/29/2223803.html尽管内核模块不象应用程序一样顺序执行, 内核做的大部分动作是代表一个特定进程的. 内核代码可以引用当前进程, 通过存取全局项 current, 它在 <asm/current.h> 中定义, 它产生一个指针指向结构 task_struct, 在 <linux/sched.h> 定义. current 指针指向当前在运行的进程. 在一个系统调用执行期间, 例如 open 或者 read, 当前进程是发出调用的进程. 内核代码可以通过使用 curre 阅读全文
posted @ 2012-01-12 20:47 balaamwe 编辑
摘要:第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有 阅读全文
posted @ 2012-01-12 20:46 balaamwe 阅读(254) 评论(0) 推荐(0) 编辑
摘要:tcp socket的发送缓冲区实际上是一个结构体struct sk_buff的队列,我们可以把它称为发送缓冲队列,由结构体struct sock的成员sk_write_queue(struct sk_buf_head)表示。sk_write_queue是一个结构体struct sk_buff_head类型,这是一个struct sk_buff的双向链表,其定义如下: struct sk_buff_head { struct sk_buff *next; //后指针 struct sk_buff *prev; //前指针 __u32 qlen; //队列长度(即含有几个struct sk_.. 阅读全文
posted @ 2012-01-12 20:45 balaamwe 阅读(6133) 评论(0) 推荐(1) 编辑
摘要:2.1 网络驱动程序的结构所有的Linux网络驱动程序遵循通用的接口。设计时采用的是面向对象的方法。一个设备就是一个对象(device 结构),它内部有自己的数据和方法。每一个设备的方法被调用时的第一个参数都是这个设备对象本身。这样这个方法就可以存取自身的数据(类似面向对象程序设计时的this引用)。一个网络设备最基本的方法有初始化、发送和接收。------------------- ---------------------|deliver packets | |receive packets queue||(dev_queue_xmit()) | |them(netif_rx()) |-- 阅读全文
posted @ 2012-01-12 20:44 balaamwe 阅读(462) 评论(0) 推荐(0) 编辑
摘要:Linux操作系统网络驱动程序编写一.Linux系统设备驱动程序概述1.1 Linux设备驱动程序分类1.2 编写驱动程序的一些基本概念二.Linux系统网络设备驱动程序2.1 网络驱动程序的结构2.2 网络驱动程序的基本方法2.3 网络驱动程序中用到的数据结构2.4 常用的系统支持三.编写Linux网络驱动程序中可能遇到的问题3.1 中断共享3.2 硬件发送忙时的处理3.3 流量控制(flow control)3.4 调试四.进一步的阅读五.杂项一.Linux系统设备驱动程序概述1.1 Linux设备驱动程序分类Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益 阅读全文
posted @ 2012-01-12 20:43 balaamwe 阅读(439) 评论(0) 推荐(0) 编辑
摘要:Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时 阅读全文
posted @ 2012-01-12 20:40 balaamwe 编辑
摘要:Linux内核中的等待队列Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表,如下图所示。在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待队列项中都包含一个list_head类型的域作为"连接件"。由于我们只需要对队列进行添加和删除操作,并不会修改其中的对象(等待队列项),因此,我们只需 阅读全文
posted @ 2012-01-12 20:39 balaamwe 阅读(2601) 评论(0) 推荐(1) 编辑
摘要:●IP转发,或称IP路由,简单地说,就是路由器接收一个IP包后,下一步就决定往路由器的哪个端口发送该数据包出去。具体地分析,大概有如下几个步骤:1)路由器接收到数据帧并检查其校验码(FCS)。如果有错误发生,帧被丢弃。路由器不负责恢复丢失的包。2)如果没有错误发生,路由器接下来检查包的类型(Ethernet Type字段),并解包。数据链路层包头和包尾被丢弃。3)假设该包为IP包,路由器检查其路由表,找到和包中目的IP地址最匹配的前缀。4)匹配的路由表记录了包含外发接口和下一跳路由器;利用这些信息可以重组一个新的数据链路帧。5)在创建一个新帧之前,路由器会更新其IP包头的TTL字段,并重新计算 阅读全文
posted @ 2012-01-12 20:37 balaamwe 编辑
摘要:http://www.ibm.com/developerworks/cn/linux/l-hisock.html 阅读全文
posted @ 2012-01-12 20:22 balaamwe 编辑
摘要:SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stag,不同资源消耗的Stag使用不同数量的线程来处理,Stag间使用事件驱动的异步通信模式。 更进一步,在每个Stage中可以动态配置自己的线程数,在超载时降级运行(如输出纯文字页面)或拒绝服务。 在每个Stage的通常有如下组件: Incoming Event Queue ,事件队列。 Admission Controller 阀门,拒绝服务。 Dynamically sized Thread Pool, 线程池。 Event Handler ,实际处理业务的Com... 阅读全文
posted @ 2012-01-12 11:14 balaamwe 编辑
摘要:http://chinaliwee.blog.163.com/blog/static/34118206200871081847280/Apache MINA 线程模型配置2007-04-27 09:54本文内容是配置基于MINA的应用中的线程模型。1 禁止缺省的ThreadModel设置 MINA2.0及以后版本已经没有ThreadModel了,如果使用这些版本的话,可以跳过本节。 ThreadModel设置是在MINA1.0以后引入的,但是使用ThreadModel增加了配置的复杂性,推荐禁止掉缺省的TheadModel配置。 IoAcceptor acceptor = .... 阅读全文
posted @ 2012-01-12 10:41 balaamwe 阅读(1472) 评论(0) 推荐(0) 编辑
摘要:http://scholers.iteye.com/blog/730429我们知道,进行SOCKET tcp/ip通信的时候,不知道每次接受的报文到底有多长?也就是是判断不了报文(消息)的边界。 一般的做法有下面几种:1。设定固定长度的报文头,在固定的报文头上增加消息长度。每次读取的时候先读这个报文头,得到本次消息的总体长度。2。在报文中设定特殊字符作为边界。比如:***************************之类的特殊符号等。MINA2(我采用的版本是MINA2 RC1版本)中我采用第一种方式来读取消息报文。具体代码:可以利用IoBuffer的prefixedDataAvailabl 阅读全文
posted @ 2012-01-11 13:55 balaamwe 编辑
摘要:1.position例:Java代码position()第一次使用返回值为当前位置:0position(8) 返回第8个字节以后的数据(包括第8个)可以和 limit 联合使用如:Java代码buffer.position(3);buffer.limit(7);ByteBufferslice=buffer.slice();再次调用 position() 返回:82.remaining例:Java代码ByteBufferbyt=ByteBuffer.allocate(128,false);第一次调用byt.remaining(); 返回 128A、使用:byt.putInt(5);或者byt.g 阅读全文
posted @ 2012-01-11 13:54 balaamwe 编辑
摘要:http://scholers.iteye.com/blog/784336 MINA2中(MINA2 RC版本,MINA2.0正式版已经发布)服务端接受数据默认有一定长度的缓冲区(可以在启动的时候设置)。那么对于大报文,怎么处理呢?比如说超过1024,甚至更多?MINA2为了节省网络流量,提高处理效率,会将大报文自动拆分(可能是存放MINA2中的缓冲区里面):比如2048字节的报文,就会拆分成两次;那么在接受的时候,就有一个如何判断是完整报文的问题,或者说是一个拆包组包的问题。 MINA2中初始化服务的时候是可以设置输入和输出的缓冲区的:Java代码acceptor.getSessionCon 阅读全文
posted @ 2012-01-11 13:53 balaamwe 编辑
摘要:一、背景MINA框架允许开发人员在编写基于MINA的应用程序时使用自己熟悉的日志系统。二、SLF4JMINA框架使用Simple Logging Facade for Java (SLF4J)。你可以在这里获取到更多关于SLF4J的信息,这种日志系统兼容各种日志系统的实现。你可能会使用log4j、java.util.logging或其他的日志系统,使用这种日志框架的好处在于如果你在开发过程中,将日志系统从java.util.logging改为log4j,你根本不需要修改你的代码。选择正确的jar包Logging frameworkRequired JARsLog4J 1.2.xslf4j-ap 阅读全文
posted @ 2012-01-11 13:41 balaamwe 阅读(2254) 评论(0) 推荐(0) 编辑
摘要:privatevoidcheckDeadLock(){//Onlyread/write/connect/writefuturecancausedeadlock.if(!(thisinstanceofCloseFuture||thisinstanceofWriteFuture||thisinstanceofReadFuture||thisinstanceofConnectFuture)){return;}//GetthecurrentthreadstackTrace.//UsingThread.currentThread().getStackTrace()isthebestsolution,// 阅读全文
posted @ 2012-01-11 10:47 balaamwe 编辑
摘要:CLOSE_WAIT,TCP的癌症,TCP的朋友。http://www.blogjava.net/fine/archive/2008/07/26/217709.htmlCLOSE_WAIT状态的生成原因首先我们知道,如果我们的服务器程序APACHE处于CLOSE_WAIT状态的话,说明套接字是被动关闭的!因为如果是CLIENT端主动断掉当前连接的话,那么双方关闭这个TCP连接共需要四个packet:Client--->FIN--->ServerClient<---ACK<---Server这时候Client端处于FIN_WAIT_2状态;而Server程序处于CLOSE 阅读全文
posted @ 2012-01-10 16:19 balaamwe 编辑
摘要:http://www.cnblogs.com/ggzwtj/archive/2011/10/14/2212095.htmlMina之session1、IoSession与底层的传输层类型无关,表示通信双端的连接。提供用户自定义属性,可以用于在过滤器和处理器之间交换用户自定义协议相关信息。每个会话都由一个Service来提供服务,同时有一个Handler负责此会话的I/O事件处理。最重要的两个方法就是read和write,这两个方法都是异步执行,如要真正完成必须在其结果上进行等待。关闭会话的方法close也是异步执行的,也就是应等待返回的CloseFuture,此外,还有另一种关闭方式close 阅读全文
posted @ 2012-01-09 17:24 balaamwe 阅读(1980) 评论(0) 推荐(0) 编辑
摘要:再次看这篇文章,感觉说的好多都是废话,在文章最前面补充一句话:“[]的优先级高于*”,大家可以带着这句话看下面的~~~========================再一次的见证了自己的基础不牢靠。。。幸好发现得早,看见网上说,华为的一个面试题就考了这个方面的。借那道华为的面试题引出问题,题目:char **p, a[16][8]; 问:p=a是否会导致程序在以后出现问题?为什么?可能有一部分朋友会回答正确,这里他们认为,a[]是一级指针,a[][]就是二级指针。那这个到底对不对呢?OK,用事实说话:1234567891011121314151617// Author: Tanky Woo// 阅读全文
posted @ 2012-01-07 22:23 balaamwe 编辑
摘要:GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。它在编写linux的时候自己制作了一个标准成为GNU C标准。ANSI美国国家标准协会,它对C做的标准ANSI C标准后来被国际标准协会接收成为标准C所以ANSI C和标准C是一个概念总体来说现在linux也支持标准C,以后标准C可以跨平台,而GUN c一般只在linux c下应用18.1 ANSI C和标准C++的差别这里的ANSI C指的是最新的标准-C991、ANSI C不支持引用2、ANSI C不支持函数重载3、ANSI C多了两个整型(long lon 阅读全文
posted @ 2012-01-07 21:54 balaamwe 编辑
摘要:void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如: int *pint; void *pvoid; pvoid = pint; /* 不过不能 pint = pvoid; */ 如果要将pvoid赋给其他类型指针,则需要强制类型转换如:pint = (int *)pvoid; ②在ANSI C标准中,不允许对void指针进行算术运算如pvoid++或pvoid+=1等,而在GNU中则允许,因为在缺省情况下,GNU认为void *与char *一 阅读全文
posted @ 2012-01-07 21:42 balaamwe 编辑
摘要:http://hi.baidu.com/lingiloveyou/blog/item/21e57cf3322a6b40342accc7.html什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。 下面是Linux系统下用C语言创建的一个线程池。线程池会维护一个任务链表(每个CThread_worker结构就是一个任务)。 pool_init()函数预先创建好max_thread_num个线程,每个线 阅读全文
posted @ 2012-01-06 18:40 balaamwe 编辑
摘要:http://blog.csdn.net/nowdoit/article/details/6145340很多事物的由来都是有理由的,现在看似晦涩难解的符号token,背后都是有一段历史!1. fp()只是一种简写方式fp()是一个函数指针,所以*fp就是该指针指向的函数,所以(*fp)()就是调用该函数的方式。也就是 (*fp)() 和 fp() 是同一个意思;ANSI C 标准规定允许程序员将上式简写成 fp(),但是要记住,这只是一种简写方式罢了!这样的话,在查看定义比较复杂的函数时候,就能容易理解了!比如(*(void(*)()0)()。2. 数组a[i]的由来.首先我们定义一个数组,a 阅读全文
posted @ 2012-01-06 18:06 balaamwe 编辑
摘要:http://bbs.sjtu.edu.cn/bbscon,board,C,file,M.1290521786.A.htmlhttp://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html 一直以来想把2005年写的《再再论指针》修改一下,因为经过了这么多年,对C/C++的理解与05年相比又有了一些进展。但公司的工作一直很忙,没有时间进行修改工作。直到10月初的长假,才开始。从放假到现在过去两个月了,一直利用空闲时间断断续续地修改,共写了两万字,十章节。偶不是作家,两万字对偶来说已经是极限中的极限了,没. 阅读全文
posted @ 2012-01-06 18:05 balaamwe 编辑
摘要:http://www.yovae.com/blog/linux-gcc%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF.htmllinux gcc编译错误2011年09月12日⁄c/c++,操作系统⁄暂无评论linux系统下的c编程与windows有所不同,如果你在用gcc编译代码的时候提示‘for’ loop initial declarations are only allowed in C99 mode,可能就是因为你在loop循环比如for中使用未预先定义的变量,比如:for(int i=0;i<10;i++){}这种写法在vc里是没有错的,而子gcc就会 阅读全文
posted @ 2012-01-06 17:41 balaamwe 编辑
摘要:http://blog.chinaunix.net/space.php?uid=7907749&do=blog&id=2037213dlmalloc解析连载完结【总】(2009-05-27 17:26)分类:dlmalloc解析目录1.本文档介绍2.边界标记法3.分箱式内存管理4.核心结构体malloc_state5.内存分配相关函数5.1函数dlmalloc5.2函数tmalloc_small5.3函数tmalloc_large5.4函数sys_alloc5.5函数mmap_alloc6.内存回收相关函数6.1函数dlfree6.2函数sys_trim7.本文档声明1.本文档 阅读全文
posted @ 2012-01-06 15:23 balaamwe 编辑
摘要:http://3xin2yi.info/wwwroot/tech/doku.php/tech:system:memoryleak内存泄露是指在程序运行过程中,动态申请了部分内存空间,却没有在使用完毕后将其释放,结果导致该内存空间无法被再次使用。内存泄露是使用C或C++编程时易犯的错误之一,严重的内存泄露常常表现为:程序运行时间的越长,占用的内存越多,最终导致系统内存枯竭。如以下代码:int *dup_buffer(int* buffer, int size){ int *p; p = (int *) malloc(size*sizeof(int)); if (p !=0) ... 阅读全文
posted @ 2012-01-06 15:19 balaamwe 编辑
摘要:http://bbs.byr.cn/pc/pccon.php?id=315&nid=68136写程序时用malloc竟然出现段错误,而且明显那块没有用错,肯定是别的地方有内存泄漏的问题,导致最后内存泄漏了。需要好好查一查原因了。但程序中很多地方都用来malloc,内存全是随便用的,要改起来估计十分麻烦。。。。下面找了点malloc与free的介绍,先看下,然后赶紧改代码。在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多, 阅读全文
posted @ 2012-01-06 14:26 balaamwe 编辑
摘要:这个数据结构是这样的:structhostent {const char*h_name;// official name of hostchar**h_aliases;// alias listshorth_addrtype;// host address typeshorth_length;// length of addresschar**h_addr_list;// list of addresses from name server#defineh_addrh_addr_list[0]// address, for backward compatiblity};typedef uint 阅读全文
posted @ 2012-01-06 00:35 balaamwe 编辑
摘要:在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下:typedef unsigned short sa_family_t;struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */在linux环境下,结构体struct sockaddr_in在/usr/include/netinet/in.h中定义,具体如下:/* Structure 阅读全文
posted @ 2012-01-05 19:07 balaamwe 编辑
摘要:网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网 阅读全文
posted @ 2012-01-05 18:58 balaamwe 编辑
摘要:netinet/in.h - Internet address family netinet / in.h - 互联网地址族http://pubs.opengroup.org/onlinepubs/000095399/basedefs/netinet/in.h.html 阅读全文
posted @ 2012-01-05 16:16 balaamwe 编辑
摘要:Connection reset by peer的常见原因:1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病毒或者木马,引起网络流量异常。可以使用netstat -an查看网络连接情况。2)客户关掉了浏览器,而服务器还在给客户端发送数据;3)浏览器端按了Stop;这两种情况一般不会影响服务器。但是如果对异常信息没有特别处理,有可能在服务器的日志文件中,重复出现该异常,造成服务器日志文件过大,影响服务器的运行。可以对引起异常的部分,使用try...catch捕获该异常,然后不输出或者只输出一句提示信息,避 阅读全文
posted @ 2012-01-05 12:14 balaamwe 编辑
摘要:TCP: SYN ACK FIN RST PSH URG 详解=============================================================TCP的三次握手是怎么进行的了:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。*SY 阅读全文
posted @ 2012-01-03 18:55 balaamwe 编辑