
服务器开发
文章平均质量分 78
voipmaker
nnn
展开
-
Linux Kernel Tuning for C500k
Kernel OptionsSeveral parameters exist to allow for tuning and tweaking of socket-related parameters. In /etc/sysctl.conf there ar原创 2011-07-03 22:30:38 · 1554 阅读 · 0 评论 -
测试网站负载能力工具
服务器性能压力测试工具有 http_load,webbench,ab,Siegewebbench最多可以模拟3万个并发连接去测试网站的负载能力1、适用系统:Linux2、编译安装:引用wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gztar zxvf webbench-1.5.tar.gzcd webbench-1.5make && make install用法:webbench -c 并发数 -t 运行测试时间 URL如:w原创 2011-04-18 10:35:00 · 4412 阅读 · 0 评论 -
TCP连接状态详细解释
<br />1.LISTEN<br />监听状态,表示服务器进程监听某端口等待着为到来的TCP客户端提供服务。<br />2.SYN_RECV<br />表示服务器接收到了TCP客户端发送来的SYN数据包后,服务器已经发出了对应的响应ACK包和自己的SYN包给客户端。<br />3.SYN_SEND<br />此状态通常用在客户端发起到服务器的连接,表示客户端主机主动向服务器发出了SYN包后的状态。<br />4.ESTABLISHED<br />在客户端受到服务器的ACK应答包和SYN包后,向服务器发出A原创 2011-04-14 23:17:00 · 1589 阅读 · 0 评论 -
lighttpd等web服务器中的epoll学习
<br /> epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的 select/poll操作,只要还有没有处理的事件就会一直通知.<br />以代码来说明问题:<br />首先给出server的代码,需要说明的是每次accept的连接,加入可读集的时候采用的都是ET模式,而且接收缓冲区是5字节的,也就是每次只接收5字节的数据:<br />u原创 2011-03-26 17:10:00 · 1594 阅读 · 0 评论 -
基于WEB 的实时事件通知
<br />基于 WEB 的实时事件通知方式大致有五种方案:HTTP拉取方式(pull),HTTP流,Long Polling,Flash XMLSocket方式,java Applet。<br /><br />首先说下Comet这个词,Comet 这个词是最早由Alex Russell(Dojo Toolkit 的项目 Lead)提出的,称基于 HTTP 长连接、无须在浏览器端安装插件的“服务器推(Push)”技术为“Comet”。<br /><br />1.HTTP拉取方式(pull)<br />在 这原创 2011-03-23 19:51:00 · 1769 阅读 · 0 评论 -
unp 笔记
<br />inet_ntop(AF_INET,&clieaddr.sin_addr, buf, sizeof(buf)), <br />客户端ip地址转成数字形式,此函数是协议无关的(ipv4,ipv6)。<br />ntohs (clieaddr.sin_port),客户端端口转换成整形。<br />socklen_t socket 数据类型长度,通常用在 socket函数(socket, connect, accept)的第三个参数,而且作为 值-结果 参数,即传地址。<br /> <br />原创 2011-02-21 13:43:00 · 1239 阅读 · 0 评论 -
剖析 epoll ET/LT 触发方式的性能差异
<br />剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)<br /><br />平时大家使用 epoll 时都知道其事件触发模式有默认的 level-trigger 模式和通过 EPOLLET 启用的 edge-trigger 模式两种。从 epoll 发展历史来看,它刚诞生时只有 edge-trigger 模式,后来因容易产生 race-cond 且不易被开发者理解,又增加了 level-trigger 模式并作为默认处理方式。<br /><br />二者的差异在于 level-tri原创 2011-02-15 13:09:00 · 1992 阅读 · 0 评论 -
网络编程常见问题总结
在网络程序中遇到的一些问题进行了总结, 这里主要针对的是我们常用的TCP socket相关的总结, 可能会存在错误, 有任何问题欢迎大家提出. 对于网络编程的更多详细说明建议参考下面的书籍 《UNIX网络编程》 《TCP/IP 详解》 《Unix环境高级编程》 非阻塞IO和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO和非阻塞IO的概念, 这里对于这两种socket先做一下说明 基本概念:socket的阻塞模式意味着必须要做完IO操作(包括错误)才会返回。 非阻塞模式下无论原创 2011-02-10 21:39:00 · 1649 阅读 · 0 评论 -
Linux下epoll原理及封装的源代码
#ifndef XEPOLL_H#define XEPOLL_H#include #include #include #include #include #include #include #include #include #include #include #include原创 2010-09-08 16:31:00 · 7322 阅读 · 0 评论 -
分析进程占用 cpu过高 方法
1.进程 里线程cpu排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep freeswitch2. gdb attach 到进程号码3. gdb info threads找到线程号码对应的thread,thread 线程号码切换到线程bt查看线程调用。原创 2013-11-04 22:57:57 · 5056 阅读 · 1 评论 -
一个轻量级 http server 技术选型
csdn lidp http://blog.youkuaiyun.com/perfectpdl打算业余时间写个 轻量级的http server,权当学习http 协议 simple architecture for high performance we :1. use EPOLL for io event trigger , ET or LT ?2. use master-原创 2011-11-17 18:25:14 · 2388 阅读 · 1 评论 -
高性能服务器编程中的定时器
编写服务器常常会需要实现定时器功能。windows下有微软封得好好的控件,拖之即用,Linux下面就算了,还是自己动手吧。虽说Linux提供了基于信号的定时功能(alarm,settimer),但是,考虑到信号是如此的粗暴,还是算了,在写高性能服务器的时候,还是别用了。免得被虐。既然放弃了系统的定时功能,那么只能在用户空间自己实现了,思路也很简单。维护一个时间和一堆定时器事件,每次转载 2011-11-14 23:50:01 · 2711 阅读 · 0 评论 -
性能调优笔记
1、性能调优的步骤1.1、衡量系统现状包括请求次数、响应时间、资源消耗等;如:A系统目前95%的请求响应为1s。1.2、设定调优目标根据用户所能接受的响应速度、系统现有的机器、所支撑的用户量制定出来的,因此通常会设定调优目标:95%的 请求在500ms内返回。1.3、寻找性能瓶颈在【2、寻找性能瓶颈】会专门介绍。通常性能瓶颈的表像是:1.3.1、资源消耗过多(C转载 2011-11-18 15:03:32 · 1548 阅读 · 0 评论 -
epoll相关资料
epoll学习笔记多进程服务器中,epoll的创建应该在创建子进程之后原创 2011-11-13 22:01:02 · 1439 阅读 · 0 评论 -
Linux下突破限制实现高并发量服务器
1、修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数 量都要受到系统对用户单一进程同时可打开文件数量的 限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时原创 2011-09-30 12:52:28 · 3216 阅读 · 0 评论 -
yate 指南
1.Yate 框架设计 Yate 的设计是为了提供一个可扩展性的电话引擎,试图以最简简洁的代码,在扩展所需功能与性能、稳定性之间达到最佳平衡。 Yate 设计分为三大部分: (1) 引擎( Engine ) 该引擎已 Yate C++ 类为基础转载 2011-09-17 00:32:20 · 4912 阅读 · 1 评论 -
Linux 守护进程的编程实现
<br />Linux 守护进程的编程方法 <br />守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器in原创 2010-10-13 22:59:00 · 1072 阅读 · 0 评论 -
用 libevent 和 libev 提高网络应用性能
简介许多服务器部署(尤其是 web 服务器部署)面对的最大问题之一是必须能够处理大量连接。无论是通过构建基于云的服务来处理网络通信流,还是把应用程序分布在 IBM Amazon EC 实例上,还是为网站提供高性能组件,都需要能够处理大量并发连接。一个好例子是,web 应用程序最近转载 2011-07-21 23:37:58 · 1888 阅读 · 0 评论 -
Java theory and practice: Thread pools and work queues
<br />Thread pools help achieve optimum resource utilizationBrian Goetz (brian@quiotix.com), Principal Consultant, Quiotix CorpBrian Goetz is a software consultant and has been a professional software developer for the past 15 years. He is a Principal Cons原创 2011-01-28 21:34:00 · 2092 阅读 · 0 评论 -
Accept() scalability on Linux
IntroductionThe purpose of this document is to share some ideas that I've developed over the years about how to develop a certain kind of application for which the term "server" is only a weak approximation. More accurately, I'll be writing about a broad原创 2011-01-27 23:11:00 · 1491 阅读 · 0 评论 -
Using epoll() For Asynchronous Network Programming
<br />General way to implement tcp servers is “one thread/process per connection”. But on high loads this approach can be not so efficient and we need to use another patterns of connection handling. In this article I will describe how to implement tcp-serv原创 2011-01-27 23:06:00 · 1556 阅读 · 0 评论 -
linux 信号
<br />linux信号机制远远比想象的复杂,本文力争用最短的篇幅,对该机制做了深入细致的分析。信号应用实例将在信号(下)中给出。 <br />一、信号及信号来源 <br />信号本质 <br />信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 <br />信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情原创 2010-10-19 13:59:00 · 954 阅读 · 0 评论 -
轻量级 Web 服务器
<br />最近几年,市场上出现了很多有趣的 Web 服务器实现,包括 lighthttpd、litespeed 和 mongrel 等。这些 Web 服务器都宣称结合了性能、易管理性、可移植性、安全性和其他相关价值。下面的工程研究将调查轻量级 Web 服务器,以帮助您选择最可能满足下一个项目的技术需求的 Web 服务器。<br /> <br />“轻量级” Web 服务器,例如 lighthttpd、 litespeed 和 mongrel,可以为项目带来很多的好处。本文调查这种可能性,并展示这些 Web原创 2010-10-18 00:16:00 · 1530 阅读 · 0 评论 -
epoll学习:思考一种高性能的服务器处理框架
终于开始学习epoll了,虽然不明白的地方还是很多,但从理论到实践,相信自己动手去写一个具体的框架后,一切会清晰很多。<br /><br />1、首先需要一个内存池,目的在于:<br />·减少频繁的分配和释放,提高性能的同时,还能避免内存碎片的问题;<br />·能够存储变长的数据,不要很傻瓜地只能预分配一个最大长度;<br />·基于SLAB算法实现内存池是一个好的思路:分配不同大小的多个块,请求时返回大于请求长度的最小块即可,对于容器而言,处理固定块的分配和回收,相当容易实现。当然,还要记得需要设计成原创 2010-12-03 14:04:00 · 964 阅读 · 0 评论 -
“服务器推”技术的应用
<br />传统模式的 Web 系统以客户端发出请求、服务器端响应的方式工作。这种方式并不能满足很多现实应用的需求,譬如:监控系统:后台硬件热插拔、LED、温度、电压发生变化; 即时通信系统:其它用户登录、发送信息; 即时报价系统:后台数据库内容发生变化; <br />这些应用都需要服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求。“服务器推”技术在现实应用中有一些解决方案,本文将这些解决方案分为两类:一类需要在浏览器端安装插件,基于套接口传送信息,或是使用 RMI、CORBA 进行远程调用;而原创 2010-12-02 22:28:00 · 808 阅读 · 0 评论 -
Remote Procedure Calls (RPC)
<br />SubsectionsWhat Is RPCHow RPC WorksRPC Application DevelopmentDefining the ProtocolDefining Client and Server Application CodeCompliling and running the applicationOverview of Interface RoutinesSimplified Level Routine FunctionTop Level RoutinesInter原创 2010-10-17 01:41:00 · 1409 阅读 · 0 评论 -
多线程服务器的适用场合
<br />“服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而退出,它会等着下一个请求的到来。例如 wget 不是长期运行的,httpd 是长期运行的。<br />正名<br />与前文相同,本文的“进程”指的是 fork() 系统调用的产物。“线程”指的是 pthread_create() 的产物,而且我指的 pthr原创 2010-10-13 22:07:00 · 1030 阅读 · 0 评论 -
多线程服务器的常用编程模型
<br />这篇文章原本是前一篇博客《多线程服务器的常用编程模型》(以下简称《常用模型》)计划中的一节,今天终于写完了。<br />“服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而退出,它会等着下一个请求的到来。例如 wget 不是长期运行的,httpd 是长期运行的。<br />正名<br />与前文相同,本文的“进原创 2010-10-13 22:03:00 · 948 阅读 · 0 评论 -
在Linux上开发网络服务器的一些相关细节:poll与epoll
<br />随着2.6内核对epoll的完全支持,网络上很多的文章和示例代码都提供了这样一个信息:使用epoll代替传统的 poll能给网络服务应用带来性能上的提升。但大多文章里关于性能提升的原因解释的较少,这里我将试分析一下内核(2.6.21.1)代码中poll与 epoll的工作原理,然后再通过一些测试数据来对比具体效果。 <br /><br />POLL: <br /><br />先说poll,poll或select为大部分Unix/Linux程序员所熟悉,这俩个东西原理类似,性能上也不存在明显差异,原创 2010-12-03 13:59:00 · 953 阅读 · 0 评论 -
epoll
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 <br />相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明: <br />#define __FD_SETSIZE 1024<br />表示select最多同时监听1024个fd,原创 2010-12-03 18:25:00 · 800 阅读 · 0 评论 -
Linux的EPoll模型
<br />Linux的EPoll模型<br />Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。<br /><br />1、为什么select落后<br />首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内核中,该值是1024,搜索内核源代码得到:<br />include/l原创 2010-12-03 14:03:00 · 704 阅读 · 0 评论 -
HTTP长连接服务器端推技术
<br />服务器推送(Server Push) <br />推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接。当服务器需要再次发送一批数据时,浏览器显示数据并保持连接。以后,服务器仍然可以发送批量数据,浏览器继续显示数据,依次类推。 <br />客户端拉曳(Client Pull) <br />在客户端拖曳技术中,服务器发送一批数据,在HTTP响应或文档头标记中插入指令,让浏览器“在5秒内再次装入这些数据”或“10秒内前往某UR原创 2010-10-12 17:58:00 · 1327 阅读 · 0 评论 -
网络编程之C10K问题
<br />编写连接数巨大的高负载服务器程序时,经典的多线程模式和select模式都不再适用。应当抛弃它们,采用epoll/kqueue/dev_poll来捕获I/O事件。最后简要介绍了AIO。<br />由来:网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为C10K问题。随着互联网的迅速发展,越来越多的网络服务开始面临C10K问题,作为大型网站的开发人员有必要对C10K问题有一定的了解。(本文的主要参考文献是 http://www.kegel.com/c10k.htmls。)原创 2010-12-11 13:59:00 · 1159 阅读 · 0 评论 -
epoll的实现原理
<br />epoll与select/poll不同的一点是,它是由一组系统调用组成。<br /> int epoll_create(int size);<br /> int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);<br /> int epoll_wait(int epfd, struct epoll_event *events,<br /> int ma原创 2010-12-11 15:01:00 · 1558 阅读 · 0 评论 -
epoll
<br />/*-------------------------------------------------------------------------------------------------<br />gcc -o httpd httpd.c -lpthread <br />author: wyezl<br />2006.4.28<br />--------------------------------------------------------------------------原创 2010-11-21 16:12:00 · 720 阅读 · 0 评论 -
使用事件驱动模型实现高效稳定的网络服务器程序
<br />围绕如何构建一个高效稳定的网络服务器程序,本文从一个最简单的服务器模型开始,依次介绍了使用多线程的服务器模型、使用非阻塞接口的服务器模型、利用select()接口实现的基于事件驱动的服务器模型,和使用libev事件驱动库的服务器模型。通过比较各个模型,得出事件驱动模型更适合构建高效稳定的网络服务器程序的结论。<br /> <br /> <br />事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的原创 2010-11-02 17:58:00 · 1397 阅读 · 0 评论 -
epoll精髓
<br />在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。<br />相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:<br />4. 然后我们读取了1KB的数据<br />5. 调用epoll_wait(2)......<br原创 2010-11-01 17:56:00 · 835 阅读 · 0 评论 -
Linux下syslog日志函数使用
<br />许多应用程序需要记录它们的活动。系统程序经常需要向控制台或日志文件写消息。这些消息可能指示错误、警告或是与系统状态有关的一般信息。例如,su程序会把某个用户尝试得到超级用户权限但失败的事实记录下来。<br />通常这些日志信息被记录在系统文件中,而这些系统文件又被保存在专用于此目的的目录中。它可能是/usr/adm或/var/log目录。对一个典型的Linux安装来说,文件 /var/log/messages包含所有系统信息,/var/log/mail包含来自邮件系统的其他日志信息,/var/l原创 2010-10-25 23:02:00 · 1887 阅读 · 0 评论 -
超轻量 pthread 集结点实现
<br />我需要的 pthread 线程集结点功能,使用同一集结点的线程将通过 rend_wait 函数等待,当集结点到达指定数量的线程后同时激发继续执行。使用 pthread 的 mutex 和 cond 超轻量实现。下面 rend.h 是集结点实现,rendezvous.c 是测试应用。<br /> C代码 /* * rend.h * * Created on: 2009-11-14 * Author: liuzy (lzy.dev@gmail.com) */ #原创 2010-10-24 00:16:00 · 958 阅读 · 0 评论 -
epoll
<br />/*<br />几个用到的类型定义以及全局变量bq<br />*/<br />char smtp_cmd_format;<br />struct epoll_event ev, events[MAX_EPOLL_SIZE];<br />int kdpfd,nfds;<br />struct block_queue<br />{<br /> int queue[THREADS_COUNT];<br /> long size;<br /> pthread_cond_t cond;<br /> pth原创 2010-10-24 00:09:00 · 893 阅读 · 0 评论