一个用c语言写的服务端压测工具.
Web Bench is very simple tool for benchmarking WWW or proxy servers.
Uses fork() for simulating multiple clients and can use HTTP/0.9-HTTP/1.1 requests.
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
make && make install
webbench-1.5 webbench --version
1.5 # 使用
1) webbench http://github.com/ -t 10 -c 20
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://github.com/
20 clients, running 10 sec.
Speed=2214 pages/min, 3800 bytes/sec.
Requests: 369 susceed, 0 failed.
webbench-1.5 tree -L 2
.
├── COPYRIGHT -> debian/copyright
├── ChangeLog -> debian/changelog
├── Makefile
├── debian
│ ├── changelog
│ ├── control
│ ├── copyright
│ ├── dirs
│ └── rules
├── socket.c
├── webbench.1
└── webbench.c
就是建立一个客户端到服务端的socket连接,准备后续的发送数据准备,返回一个socket
文件描述符(a descriptor)
几个函数:
gethostbyname
socket
connect
2个struct:
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
// IPv4 AF_INET sockets:
struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
struct in_addr {
unsigned long s_addr; // load with inet_pton()
};
解析用户的命令行长格式或短格式的参数,参数支持 912Vfrt:p:c:?h
getopt_long(argc,argv,"912Vfrt:p:c:?h",long_options,&options_index))
是getopt函数的升级版
通过url参数构造 request header
bzero,strcpy,strcat,index 这些函数
创建一个管道,实现父子进程通信。
管道的读写规则:
管道两端可分别用描述字fd[0]以及fd[1]来描述,需要注意的是,管道的两端是固定了任务的。
即一端只能用于读,由描述字fd[0]表示,称其为管道读端;另一端则只能用于写,由描述字fd[1]
来表示,称其为管道写端。
如果试图从管道写端读取数据,或者向管道读端写入数据都将导致错误发生。一般文件的I/O函
数都可以用于管道,如close、read、write等等。
fdopen 将文件描述词转为文件指针,可以对管道进行读写操作。
fork一个子进程,子进程返回Pid=0 ,父进程返回pid>0 是子进程的pid
函数:设置文件流的缓冲区 # bench()
fork 多个子进程,打个管道,读管道,子进程将结果写入管道,执行benchcore
设置信号传送闹钟,设置信号SIGALRM 在经过参数seconds 指定的秒数后传送给目前的进程.
如果参数seconds 为0, 则之前设置的闹钟会被取消, 并将剩下的时间返回.