• Stars
    star
    73
  • Rank 433,657 (Top 9 %)
  • Language
    Perl
  • License
    Other
  • Created about 10 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Preforked Plack Handler for performance freaks

NAME

Gazelle - a Preforked Plack Handler for performance freaks

SYNOPSIS

$ plackup -s Gazelle --port 5003 --max-reqs-per-child 50000 \
     -E production -a app.psgi

DESCRIPTION

Gazelle is a PSGI Handler. It is derivied from Starlet. A lot of its code was rewritten or optimized by converting it to XS code.

Gazelle supports following features:

  • Supports HTTP/1.1. (Without Keepalive support.)
  • Ultra fast HTTP processing using picohttpparser.
  • Uses accept4(2) if the operating system supports it.
  • Uses writev(2) for output responses.
  • Prefork and graceful shutdown using Parallel::Prefork.
  • Hot deploy and unix domain socket using Server::Starter.

Gazelle is suitable for running HTTP application servers behind a reverse proxy such as nginx.

One can find a Benchmark here: https://github.com/kazeburo/Gazelle/wiki/Benchmark .

SAMPLE CONFIGURATION WITH NGINX

nginx.conf:

http {
  upstream app {
    server unix:/path/to/app.sock;
  }
  server {
    location / {
      proxy_pass http://app;
    }
    location ~ ^/(stylesheets|images)/ {
      root /path/to/webapp/public;
    }
  }
}

command line of running Gazelle

$ start_server --path /path/to/app.sock --backlog 16384 -- plackup -s Gazelle \
  -workers=20 --max-reqs-per-child 1000 --min-reqs-per-child 800 -E production -a app.psgi

start_server is bundled with Server::Starter

COMMAND LINE OPTIONS

In addition to the options supported by plackup, Gazelle accepts the following options:

--max-workers=#

Number of worker processes (default: 10).

--timeout=#

Seconds until timeout (default: 300).

--max-reqs-per-child=#

Maximal number of requests to be handled before a worker process exits (default: 1000).

--min-reqs-per-child=#

If set, randomize the number of requests handled by a single worker process between this value and the one supplied by --max-reqs-per-child (default: none).

--spawn-interval=#

If set, worker processes will not be spawned more than once than every number of seconds given in the parameter. Furthermore, when a SIGHUP is being received, no more than one worker processes will be collected during this interval. This feature is useful for doing a "slow-restart". See http://blog.kazuhooku.com/2011/04/web-serverstarter-parallelprefork.html for more information. (default: none)

--child-exit=s

the subroutine code to be executed right before a child process exits. e.g. --child-exit='sub { POSIX::_exit(0) }'. (default: none)

Extensions to PSGI

psgix.informational

Gazelle exposes a callback named psgix.informational that can be used for sending an informational response. The callback accepts two arguments, the first argument being the status code and the second being an arrayref of the headers to be sent. Example below sends an 103 response before processing the request to build a final response. sub { my $env = shift; $env["psgix.informational"}->(103, [ 'link' => '</style.css>; rel=preload' ]); my $resp = ... application logic ... $resp; }

SEE ALSO

Starlet Parallel::Prefork Server::Starter https://github.com/h2o/picohttpparser

LICENSE of Starlet

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See http://www.perl.com/perl/misc/Artistic.html

LICENSE

Copyright (C) Masahiro Nagano.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Masahiro Nagano [email protected]

More Repositories

1

rhebok

High Performance Preforked Rack Handler
C
240
star
2

GrowthForecast

Lightning Fast Graphing/Visualization
Perl
233
star
3

cloudforecast

the server metrics gathering
Perl
149
star
4

chocon

chocon is a simple proxy server for persisting connections between upstream servers.
Go
142
star
5

mysetup

my setup scripts repository
Shell
134
star
6

Kurado

monitor metrics
Perl
71
star
7

Monoceros

PSGI/Plack server with event driven connection manager, preforking workers
Perl
55
star
8

HRForecast

Perl
49
star
9

Proclet

minimalistic Supervisor
Perl
37
star
10

wsgate-server

a websocket to tcp proxy/bridge server
Go
36
star
11

Kossy

sinatra-ish simple waf
Perl
34
star
12

Plack-Middleware-ServerStatus-Lite

Plack-Middleware-ServerStatus-Lite
Perl
25
star
13

prefork_engine

a simple prefork server framework / ruby port of perl's Parallel::Prefork
Ruby
24
star
14

GreenBuckets

Perl
23
star
15

query-digester

pt-query-digest wrapper to make ops simple
Perl
23
star
16

Log-Minimal

Minimal Logger
Perl
23
star
17

pico_http_parser

Fast HTTP Parser using picohttpparser
Ruby
19
star
18

isucon2_hack

isucon2 hack
Perl
19
star
19

Redis-Jet

Yet another XS implemented Redis client
XS
18
star
20

custom-mackerel-plugins

my custom mackerel plugins
Perl
17
star
21

motarei

Simple tcp proxy for Docker Hot deploy
Go
17
star
22

go-jmx-get

tiny jmx client
Go
16
star
23

DBIx-Sunny

Perl
16
star
24

docker-h2o

Dockerfile for h2o HTTP Server with graceful restart support
Shell
12
star
25

Plack-Builder-Conditionals

Plack::Builder extension
Perl
11
star
26

Plack-Middleware-Expires

mod_expires for plack
Perl
11
star
27

wsgate-client

a websocket to tcp proxy/bridge client server
Go
10
star
28

Plack-Server-AnyEvent-Prefork

Prefork AnyEvent based HTTP Server
Perl
10
star
29

mackerel-plugin-axslog

Yet Another mackerel-plugin for analyzing and visualizing Acesslog
Go
10
star
30

mackerel-plugin-pinging

ICMP Ping RTT custom mackerel plugin
Go
9
star
31

Apache-LogFormat-Compiler

Compile LogFormat to perl-code
Perl
9
star
32

Cache-Memcached-IronPlate

Best practices for Cache::Memcached
Perl
9
star
33

Twiggy-Prefork

Preforking AnyEvent HTTP server for PSGI
Perl
9
star
34

myps

Like pgrep and pkill, grep MySQL processlist and kill threads.
Go
8
star
35

percentile

Go
8
star
36

sabo

bandwidth limiting pipe with collaborative capability
Go
8
star
37

Scope-Container

Perl
8
star
38

build_mysql_mroonga_rpm

build mysql_mroonga.rpm by Vagrant provisioners
Shell
8
star
39

JavaScript-Value-Escape

Perl
7
star
40

isucon3qualifier-myhack

Perl
7
star
41

ppdp

Proxy Protocol Dump Proxy
Go
7
star
42

Scope-Container-DBI

DB connection manager with Scope::Container
Perl
6
star
43

heroku-buildpack-perl-procfile

a Heroku buildpack that runs any perl applications from Procfile
6
star
44

Cookie-Baker

Cookie string generator
Perl
6
star
45

p5-Alien-RRDtool

Installation of RRDs.pm (Perl binding for RRDtool)
Perl
6
star
46

rpm

my rpm repository
6
star
47

NoNoPaste

yet another nopaste
Perl
6
star
48

mackerel-plugin-maxcpu

Go
6
star
49

jstat2gf

Perl
5
star
50

chunkview

chuncked trasnfer visualizer
Perl
5
star
51

Time-TZOffset

Show timezone offset strings like +0900
C
5
star
52

NoNoPaste-Cloud

dotcloud nonopaste
Perl
5
star
53

mysql40dump

mysqldump wrapper for MySQL 4.0
Perl
5
star
54

Plack-Middleware-DBIx-DisconnectAll

Disconnect all database connection at end of request
Perl
5
star
55

isucon5-elimination-public

Perl
5
star
56

POSIX-strftime-Compiler

Perl
5
star
57

HTTP-Entity-Parser

PSGI compliant HTTP Entity Parser
Perl
5
star
58

Plack-Middleware-Scope-Container

Perl
5
star
59

Data-Page-Navigation

adds methods for page navigation link to Data::Page
Perl
4
star
60

docker-perl-build

docker image of perl-build
Shell
4
star
61

Plack-App-PHPCGI

execute PHP script as CGI
Perl
4
star
62

http-dump-request

http-dump-request server and docker container for monitoring and tests
Go
4
star
63

mackerel-plugin-postfix-log

Read and analyze postfix logs
Go
4
star
64

vagrant-destroy-provisioner

vagrant-destroy-provisioner plugin allows a VM to be destroyed as a provisioning step.
Ruby
4
star
65

check_http2

Nagios check_http plugin alternative powered by Go
Go
3
star
66

isucon11-final

final isucasy XI
Vue
3
star
67

diff-detector

a tiny tool
Go
3
star
68

isucon_summer_class_2014

ISUCON ε€ζœŸθ¬›ηΏ’ 2014
Go
3
star
69

CoreListWeb

Module::CoreList Web
Perl
3
star
70

mssh

ssh tool
3
star
71

check-cert-net

Check a remote certification expiry using openssl s_client
Go
3
star
72

mackerel-plugin-log-counter

mackerel metric plugin for count lines in log
Go
3
star
73

Plack-Middleware-Log-Minimal

Perl
3
star
74

mod_copy_header

copy a response header to notes
C
3
star
75

wg-keygen-rep

wireguard keypair generator with salt string
Go
3
star
76

Module-Build-Pluggable-CPANfile

Include cpanfile
Perl
3
star
77

WWW-GoogleAnalytics-Mobile

PSGI Application of Google Analytics for Mobile and client
Perl
3
star
78

Cache-Isolator

Perl
3
star
79

check_memcached_val

nagios plugin for checking value in a memcached server
Perl
3
star
80

check-lastlog

Check users who have not logged in recently
Go
2
star
81

Redis-Tiny

deprecated
Perl
2
star
82

deteco

Simple auth server used JWT & public-key cryptography
Go
2
star
83

isucon5-final-public

Perl
2
star
84

isius

Ping/TCP/HTTP/HTTPS monitoring agent server
Go
2
star
85

mackerel-plugin-resolver-synthetic

mackerel plugin for monitoring dns server as linux resolver
Go
2
star
86

tanzak

γŸγ‚“γ–γ
Perl
2
star
87

go-check-mysql-msr

check multi source replication
Go
2
star
88

connstorm

Go
2
star
89

App-derived

run command periodically and calculate rate and check from network
Perl
2
star
90

Cache-Memcached-Fast-Safe

Cache::Memcached::Fast with sanitizing keys and fork-safe
Perl
2
star
91

DBIx-DSN-Resolver

Resolv hostname within dsn string
Perl
2
star
92

limilic2

Perl
2
star
93

ltsvparser

LTSV (Labeled Tab-separated Values) parser for Go language
Go
2
star
94

private-isu-challenge

Go
2
star
95

Plack-Middleware-AxsLog

Alternative AccessLog Middleware
Perl
2
star
96

the-rp

the reverse HTTP an TCP Reverse proxy supports asynchronous upstream resolution and some balancing strategy
Go
2
star
97

File-RotateLogs

Rotate log file
Perl
2
star
98

relaxlogs

CLI for lestrrat-go/file-rotatelogs
Go
2
star
99

AnyEvent-DNS-Cache-Simple

provides simple cache for AnyEvent::DNS
Perl
2
star
100

Time-Crontab

Parser for crontab date and time field
Perl
2
star