I have check the uwsgi document again and the JVM integration document is 
HERE 
<http://uwsgi-docs.readthedocs.org/en/latest/JWSGI.html>http://uwsgi-docs.readthedocs.org/en/latest/JWSGI.html
 .

When using uwsgi to integrate JVM, the JVM process is not the same process 
of Nginx worker.

So it can not avoid IPC cost or socket cost ! So it will use more system 
handle (at least double ones) and more copy operataion between process 

and maybe more memory cost.

So I think using uwsgi to integrate JVM maybe will not be so fast!


On Wednesday, January 15, 2014 10:10:40 AM UTC+8, Xfeep Zhang wrote:
>
> Hi Mingli, 
>
> Thanks for  your suggestion.
>
> Nginx-Clojure is quite different from uwsgi when supports JVM.
>
> Nginx-Clojure make JVM embed into Nginx worker process. JVM and Nginx 
> worker have  the same memory process space.
>
>  Nginx-Clojure heavy uses pointer operation just like C to handle memory 
> with Nginx worker. 
>
>  If I'm not wrong,  uwsgi create every process for every request, or 
> shared JVM processes between request?
>
> When using Nginx-Clojure there's no IPC cost  even no thread switch cost 
> if jvm_workers = 0 which is default.
>
> So it's why Nginx-Clojure is so fast! 
>
>
> On Wednesday, January 15, 2014 3:07:13 AM UTC+8, Mingli Yuan wrote:
>>
>> Hi, Xfeep,
>>
>> Thanks for your contribution, and the project looks interesting.
>>
>> For me, the idea of driving ring webapp behind nginx is not new. 
>> We use uwsgi to drive our ring app behind nginx in our production.
>> uwsgi support JVM and ring for almost one year, and I think the code is 
>> relative stable right now.
>>
>> - it support a native protocol between nginx and uwsgi which is more 
>> efficient than http
>> - it support unix socket
>> - and a rich uwsgi api layer to provide some means to communicate between 
>> webapps
>> - and according to the performance tests by the author, it is a little 
>> bit faster than jetty.
>>
>> It is on our production for half a year, quite stable, and very harmonious 
>> with the python app.
>>
>> I am not want to sale the solution of uwsgi, but it worth taking a look 
>> and make some comparison.
>>
>> Regards,
>> Mingli
>>
>>
>> On Tue, Jan 14, 2014 at 9:12 PM, Xfeep Zhang <easy...@163.com> wrote:
>>
>>> You are welcome! 
>>>
>>> Yes, you are right.  One JVM instance is embed  per Nginx Worker 
>>> process.  The number of Nginx Workers  is generally the same with the 
>>> number of CPU.
>>>
>>> If one Worker crashs the Nginx Master will create a new one so you don't 
>>> worry about JVM crashs accidentally.
>>>
>>> Although there will be several JVM instances,  there 's only one main 
>>> thread attached with the Nginx Woker process.
>>>
>>> So the JVM instance uses less memory and no thread context switch cost 
>>> in every JVM instance.
>>>
>>> In some cases If you can  use only one JVM instance,  you can set the 
>>> Nginx Worker number to be 1 and set jvm_workers > 1,  nginx-clojure will 
>>> create 
>>>
>>> a thread pool with fixed number of thread.
>>>
>>> to handle requests for you.
>>>
>>>
>>> On Tuesday, January 14, 2014 5:50:34 PM UTC+8, Feng Shen wrote:
>>>>
>>>> Hi, 
>>>>
>>>> Thanks for your work on nginx-clojure. It looks great!  
>>>>
>>>> As I know Nginx spawns many processes(correct me if I am wrong),  does 
>>>> that mean, there will be many JVM process?
>>>>
>>>>
>>>>
>>>>
>>>> On Tuesday, January 14, 2014 4:44:18 PM UTC+8, Xfeep Zhang wrote:
>>>>>
>>>>>
>>>>> I have done the first one. The result is 
>>>>> HERE<https://github.com/ptaoussanis/clojure-web-server-benchmarks>( 
>>>>> https://github.com/ptaoussanis/clojure-web-server-benchmarks )
>>>>> Thanks Taoussanis for his invitation to the project 
>>>>> clojure-web-server-benchmarks<https://github.com/ptaoussanis/clojure-web-server-benchmarks>hosted
>>>>>  on Github.
>>>>>
>>>>> On Tuesday, January 14, 2014 10:31:03 AM UTC+8, Xfeep Zhang wrote:
>>>>>>
>>>>>> You're welcome.
>>>>>>
>>>>>> I think there are several difficult phases :
>>>>>>
>>>>>> (1)  update the test program in 
>>>>>> clojure-web-server-benchmarks<https://github.com/ptaoussanis/clojure-web-server-benchmarks>,
>>>>>>  make the some packages to be the latest. (eg. http-kit from 
>>>>>> 1.3.0-alpha2 
>>>>>> --> 2.1.16) and add nginx-php testing
>>>>>> (2)  test about real world size contents by group eg. tiny, small, 
>>>>>> medium, huge. 
>>>>>> (3)  test about real world connection circumstances where a lot of 
>>>>>> connection is inactive but keep open.
>>>>>> (4)  try some real asynchronous test to fetch external resources (eg. 
>>>>>> rest service , db) before response to the client. eg.  using 
>>>>>> libdrizzle <https://launchpad.net/drizzle> a no-blocking mysql  
>>>>>> client from  https://launchpad.net/drizzle
>>>>>>
>>>>>> On Tuesday, January 14, 2014 2:41:50 AM UTC+8, Sergey Didenko wrote:
>>>>>>>
>>>>>>> Looks very interesting, thank you for your work!
>>>>>>>
>>>>>>> I wonder how this is going to improve latency in comparison to nginx 
>>>>>>> + http-kit for some real world test that is not using heavy DB 
>>>>>>> operations.
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Jan 13, 2014 at 5:57 AM, Xfeep Zhang <easy...@163.com>wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> So far I have found why nginx-clojure is slower than http-kit when 
>>>>>>>> 10000 concurrents. (when < = 1000 concurrents nginx-clojure is faster 
>>>>>>>> than 
>>>>>>>> http-kit.)
>>>>>>>> I have set too many connections per nginx worker 
>>>>>>>> (worker_connections = 20000) . This make nginx only use one worker to 
>>>>>>>> handle ab  requests (every request is tiny).
>>>>>>>> I plan to take note of 
>>>>>>>> c-erlang-java-performance<http://timyang.net/programming/c-erlang-java-performance/>and
>>>>>>>>  fork 
>>>>>>>> clojure-web-server-benchmarks<https://github.com/ptaoussanis/clojure-web-server-benchmarks>to
>>>>>>>>   do some  real world tests.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sunday, January 12, 2014 11:21:06 PM UTC+8, Xfeep Zhang wrote:
>>>>>>>>>
>>>>>>>>> Sorry for my mistake!
>>>>>>>>>
>>>>>>>>> 1. In the static file test, the ring-jetty result is about 10 
>>>>>>>>> concurrents. NOT 10000 concurrents  ("Concurrency Level:      10" in  
>>>>>>>>> the 
>>>>>>>>> ab report ).
>>>>>>>>> 2. In the small string test, All results about three server are 
>>>>>>>>> about 10 concurrents. NOT 10000 concurrents.
>>>>>>>>>
>>>>>>>>> There are right results about these two mistake :
>>>>>>>>>
>>>>>>>>> 1. static file test
>>>>>>>>>
>>>>>>>>> (3) ring-jetty  more bad than 10 concurrents
>>>>>>>>> ============================================================
>>>>>>>>> ===========
>>>>>>>>> Document Path:          /
>>>>>>>>> Document Length:        29686 bytes
>>>>>>>>>
>>>>>>>>> *Concurrency Level:      10000*
>>>>>>>>> Time taken for tests:   6.303 seconds
>>>>>>>>> Complete requests:      100000
>>>>>>>>> Failed requests:        0
>>>>>>>>> Write errors:           0
>>>>>>>>> Total transferred:      2982200000 bytes
>>>>>>>>> HTML transferred:       2968600000 bytes
>>>>>>>>> Requests per second:    15864.43 [#/sec] (mean)
>>>>>>>>> Time per request:       630.341 [ms] (mean)
>>>>>>>>> Time per request:       0.063 [ms] (mean, across all concurrent 
>>>>>>>>> requests)
>>>>>>>>> Transfer rate:          462020.65 [Kbytes/sec] received
>>>>>>>>>
>>>>>>>>> Connection Times (ms)
>>>>>>>>>               min  mean[+/-sd] median   max
>>>>>>>>> Connect:       12  328 535.0     43    3041
>>>>>>>>> Processing:    25  124 112.9     96    3523
>>>>>>>>> Waiting:        8   47  99.4     28    3523
>>>>>>>>> Total:         52  452 544.5    157    4546
>>>>>>>>>
>>>>>>>>> Percentage of the requests served within a certain time (ms)
>>>>>>>>>   50%    157
>>>>>>>>>   66%    305
>>>>>>>>>   75%   1071
>>>>>>>>>   80%   1102
>>>>>>>>>   90%   1139
>>>>>>>>>   95%   1155
>>>>>>>>>   98%   1462
>>>>>>>>>   99%   3100
>>>>>>>>>  100%   4546 (longest request)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2. simple string (10000 concurrents)
>>>>>>>>>
>>>>>>>>> http-kit is the fastest.  But nginx-clojure is too young and has 
>>>>>>>>> vast room for growth :)
>>>>>>>>>
>>>>>>>>> (1) nginx-clojure-0.1.0
>>>>>>>>>
>>>>>>>>> Document Path:          /
>>>>>>>>> Document Length:        15 bytes
>>>>>>>>>
>>>>>>>>> *Concurrency Level:      10000*
>>>>>>>>> Time taken for tests:   2.834 seconds
>>>>>>>>> Complete requests:      100000
>>>>>>>>> Failed requests:        0
>>>>>>>>> Write errors:           0
>>>>>>>>> Total transferred:      17000000 bytes
>>>>>>>>> HTML transferred:       1500000 bytes
>>>>>>>>> Requests per second:    35291.16 [#/sec] (mean)
>>>>>>>>> Time per request:       283.357 [ms] (mean)
>>>>>>>>> Time per request:       0.028 [ms] (mean, across all concurrent 
>>>>>>>>> requests)
>>>>>>>>> Transfer rate:          5858.88 [Kbytes/sec] received
>>>>>>>>>
>>>>>>>>> Connection Times (ms)
>>>>>>>>>               min  mean[+/-sd] median   max
>>>>>>>>> Connect:       51  118  21.6    118     178
>>>>>>>>> Processing:    73  150  33.8    146     263
>>>>>>>>> Waiting:       42  110  32.0    104     246
>>>>>>>>> Total:        177  268  25.6    269     327
>>>>>>>>>
>>>>>>>>> Percentage of the requests served within a certain time (ms)
>>>>>>>>>   50%    269
>>>>>>>>>   66%    278
>>>>>>>>>   75%    285
>>>>>>>>>   80%    288
>>>>>>>>>   90%    297
>>>>>>>>>   95%    309
>>>>>>>>>   98%    314
>>>>>>>>>   99%    318
>>>>>>>>>  100%    327 (longest request)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> (2) http-kit 2.1.16
>>>>>>>>>
>>>>>>>>> Document Path:          /
>>>>>>>>> Document Length:        15 bytes
>>>>>>>>>
>>>>>>>>> *Concurrency Level:      10000*
>>>>>>>>> Time taken for tests:   2.691 seconds
>>>>>>>>> Complete requests:      100000
>>>>>>>>> Failed requests:        0
>>>>>>>>> Write errors:           0
>>>>>>>>> Total transferred:      13400000 bytes
>>>>>>>>> HTML transferred:       1500000 bytes
>>>>>>>>> Requests per second:    37165.27 [#/sec] (mean)
>>>>>>>>> Time per request:       269.068 [ms] (mean)
>>>>>>>>> Time per request:       0.027 [ms] (mean, across all concurrent 
>>>>>>>>> requests)
>>>>>>>>> Transfer rate:          4863.42 [Kbytes/sec] received
>>>>>>>>>
>>>>>>>>> Connection Times (ms)
>>>>>>>>>               min  mean[+/-sd] median   max
>>>>>>>>> Connect:       72  118  46.2    114    1094
>>>>>>>>> Processing:    31  134  26.1    136     344
>>>>>>>>> Waiting:       21   81  33.5     71     273
>>>>>>>>> Total:        183  252  43.8    251    1435
>>>>>>>>>
>>>>>>>>> Percentage of the requests served within a certain time (ms)
>>>>>>>>>   50%    251
>>>>>>>>>   66%    258
>>>>>>>>>   75%    259
>>>>>>>>>   80%    261
>>>>>>>>>   90%    263
>>>>>>>>>   95%    263
>>>>>>>>>   98%    265
>>>>>>>>>   99%    266
>>>>>>>>>  100%   1435 (longest request)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> (3) ring-jetty
>>>>>>>>>
>>>>>>>>> Document Path:          /
>>>>>>>>> Document Length:        15 bytes
>>>>>>>>>
>>>>>>>>> *Concurrency Level:      10000*
>>>>>>>>> Time taken for tests:   9.740 seconds
>>>>>>>>> Complete requests:      100000
>>>>>>>>> Failed requests:        0
>>>>>>>>> Write errors:           0
>>>>>>>>> Total transferred:      16700000 bytes
>>>>>>>>> HTML transferred:       1500000 bytes
>>>>>>>>> Requests per second:    10267.16 [#/sec] (mean)
>>>>>>>>> Time per request:       973.979 [ms] (mean)
>>>>>>>>> Time per request:       0.097 [ms] (mean, across all concurrent 
>>>>>>>>> requests)
>>>>>>>>> Transfer rate:          1674.43 [Kbytes/sec] received
>>>>>>>>>
>>>>>>>>> Connection Times (ms)
>>>>>>>>>               min  mean[+/-sd] median   max
>>>>>>>>> Connect:        0  193 399.8     11    3006
>>>>>>>>> Processing:     0   51 207.6      5    7050
>>>>>>>>> Waiting:        0   39 204.5      4    7050
>>>>>>>>> Total:          0  244 482.0     28    8080
>>>>>>>>>
>>>>>>>>> Percentage of the requests served within a certain time (ms)
>>>>>>>>>   50%     28
>>>>>>>>>   66%     79
>>>>>>>>>   75%    283
>>>>>>>>>   80%    306
>>>>>>>>>   90%   1009
>>>>>>>>>   95%   1067
>>>>>>>>>   98%   1283
>>>>>>>>>   99%   1886
>>>>>>>>>  100%   8080 (longest request)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Friday, January 10, 2014 8:23:02 AM UTC+8, Julien wrote:
>>>>>>>>>>
>>>>>>>>>> Impressive!
>>>>>>>>>> Did you run some benchmark? How does it compare to ring-jetty and 
>>>>>>>>>> http-kit?
>>>>>>>>>>
>>>>>>>>>> Julien
>>>>>>>>>>
>>>>>>>>>> Le jeudi 9 janvier 2014 12:42:31 UTC-3, Xfeep Zhang a écrit :
>>>>>>>>>>>
>>>>>>>>>>> [image: Alt 
>>>>>>>>>>> text]<https://github.com/xfeep/nginx-clojure/blob/master/logo.png>Nginx-Clojure
>>>>>>>>>>>  
>>>>>>>>>>> is a Nginx <http://nginx.org/> module for embedding Clojure or 
>>>>>>>>>>> Java programs, typically those 
>>>>>>>>>>> Ring<https://github.com/ring-clojure/ring/blob/master/SPEC>based 
>>>>>>>>>>> handlers.
>>>>>>>>>>>
>>>>>>>>>>> There are some core features :
>>>>>>>>>>>
>>>>>>>>>>>    1. Compatible with 
>>>>>>>>>>> Ring<https://github.com/ring-clojure/ring/blob/master/SPEC>and 
>>>>>>>>>>> obviously supports those Ring based frameworks, such as Compojure 
>>>>>>>>>>> etc.
>>>>>>>>>>>    2. One of benifits of Nginx <http://nginx.org/> is worker 
>>>>>>>>>>>    processes are automatically restarted by a master process if 
>>>>>>>>>>> they crash 
>>>>>>>>>>>    3. Utilizes lazy headers and direct memory operation between 
>>>>>>>>>>>    Nginx <http://nginx.org/> and JVM to fast handle dynamic 
>>>>>>>>>>>    contents from Clojure or Java code.
>>>>>>>>>>>    4. Utilizes Nginx <http://nginx.org/> zero copy file sending 
>>>>>>>>>>>    mechanism to fast handle static contents controlled by Clojure 
>>>>>>>>>>> or Java code. 
>>>>>>>>>>>    5. 
>>>>>>>>>>>    
>>>>>>>>>>>    Supports Linux x64, Win32 and Mac OS X
>>>>>>>>>>>    
>>>>>>>>>>>
>>>>>>>>>>> Use Nginx-Clojure, you can deploy clojure web app on Nginx 
>>>>>>>>>>> without any Java web server.  For more detials please check 
>>>>>>>>>>> Nginx-Clojure 
>>>>>>>>>>> github site <https://github.com/xfeep/nginx-clojure>. 
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  -- 
>>>>>>>> -- 
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "Clojure" group.
>>>>>>>> To post to this group, send email to clo...@googlegroups.com
>>>>>>>> Note that posts from new members are moderated - please be patient 
>>>>>>>> with your first post.
>>>>>>>> To unsubscribe from this group, send email to
>>>>>>>> clojure+u...@googlegroups.com
>>>>>>>> For more options, visit this group at
>>>>>>>> http://groups.google.com/group/clojure?hl=en
>>>>>>>> --- 
>>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>>> Groups "Clojure" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>>> send an email to clojure+u...@googlegroups.com.
>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>
>>>>>>>
>>>>>>>  -- 
>>> -- 
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with 
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+u...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>>> --- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to clojure+u...@googlegroups.com.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to