编程小贴士

给你的编程提供小点子


http keepalive是怎么回事

在http早期 ,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接。使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会 断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd 服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。但是,keep-alive并不是 免费的午餐,长时间的tcp连接容易导致系统资源无效占用。配置不当的keep-alive,有时比重复利用连接带来的损失还更大。所以,正确地设置 keep-alive timeout时间非常重要。

keepalvie timeout

Httpd 守护进程,一般都提供了keep-alive timeout时间设置参数。比如nginx的keepalive_timeout,和Apache的KeepAliveTimeout。这个 keepalive_timout时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要hold住 keepalive_timeout秒后,才开始关闭这个连接。当httpd守护进程发送完一个响应后,理应马上主动关闭相应的tcp连接,设置 keepalive_timeout后,httpd守护进程会想说:”再等等吧,看看浏览器还有没有请求过来”,这一等,便是 keepalive_timeout时间。如果守护进程在这个等待的时间里,一直没有收到浏览发过来http请求,则关闭这个http连接。
我写了一个脚本,方便测试

<?php
sleep(60); //为了便于分析测试,会根据测试进行调整
echo "www.perfgeeks.com";
?>
1.当keepalive_timeout时间为0时,即不启用Keep-Alive时,一个tcp连接的生命周期
#tcpdump -n host 218.1.57.236 and port 80   20:36:50.792731 IP 218.1.57.236.43052 > 222.73.211.215.http: S 1520902589:1520902589(0) win 65535

20:36:50.792798 IP 222.73.211.215.http > 218.1.57.236.43052: S 290378256:290378256(0) ack 1520902590 win 5840

20:36:50.801629 IP 218.1.57.236.43052 > 222.73.211.215.http: . ack 1 win 32768

20:36:50.801838 IP 218.1.57.236.43052 > 222.73.211.215.http: P 1:797(796) ack 1 win 32768

20:36:50.801843 IP 222.73.211.215.http > 218.1.57.236.43052: . ack 797 win 59

20:37:50.803230 IP 222.73.211.215.http > 218.1.57.236.43052: P 1:287(286) ack 797 win 59

20:37:50.803289 IP 222.73.211.215.http > 218.1.57.236.43052: F 287:287(0) ack 797 win 59

20:37:50.893396 IP 218.1.57.236.43052 > 222.73.211.215.http: . ack 288 win 32625

20:37:50.894249 IP 218.1.57.236.43052 > 222.73.211.215.http: F 797:797(0) ack 288 win 32625

20:37:50.894252 IP 222.73.211.215.http > 218.1.57.236.43052: . ack 798 win 59

    • 第1~3行建立tcp三次握手,建立连接。用时8898μs
    • 第4~5行通过建立的连接发送第一个http请求,服务端确认收到请求。用时5μs
    • 第5~6行,可以知道脚本执行用时60s1387μs,与php脚本相符。
    • 第6、8行服务端发送http响应。发送响应用时90166μs。
    • 第7行,表明由服务端守护进程主动关闭连接。结合第6、8行,说明http响应一旦发送完毕,服务端马上关闭这个tcp连接
    • 第7、9、10说明tcp连接顺序关闭,用时90963μs。需要注意,这里socket资源并没有立即释放,需要等待2MSL时间(60s)后才被真正释放。
 由此可见,在没有设置 keepalive_timeout情况下,一个socket资源从建立到真正释放需要经过的时间是:建立tcp连接 + 传送http请求 + php脚本执行 + 传送http响应 + 关闭tcp连接 + 2MSL 。(注:这里的时间只能做参考,具体的时间主要由网络带宽,和响应大小而定)
 2.当keepalive_timeout时间大于0时,即启用Keep-Alive时,一个tcp连接的生命周期。为了便于分析,我们将keepalive_timeout设置为300s
#tcpdump -n host 218.1.57.236 and port 80   21:38:05.471129 IP 218.1.57.236.54049 > 222.73.211.215.http: S 1669618600:1669618600(0) win 65535

21:38:05.471140 IP 222.73.211.215.http > 218.1.57.236.54049: S 4166993862:4166993862(0) ack 1669618601 win 5840

21:38:05.481731 IP 218.1.57.236.54049 > 222.73.211.215.http: . ack 1 win 32768

21:38:05.481976 IP 218.1.57.236.54049 > 222.73.211.215.http: P 1:797(796) ack 1 win 32768

21:38:05.481985 IP 222.73.211.215.http > 218.1.57.236.54049: . ack 797 win 59

21:38:07.483626 IP 222.73.211.215.http > 218.1.57.236.54049: P 1:326(325) ack 797 win 59

21:38:07.747614 IP 218.1.57.236.54049 > 222.73.211.215.http: . ack 326 win 32605

21:43:07.448454 IP 222.73.211.215.http > 218.1.57.236.54049: F 326:326(0) ack 797 win 59

21:43:07.560316 IP 218.1.57.236.54049 > 222.73.211.215.http: . ack 327 win 32605

21:43:11.759102 IP 218.1.57.236.54049 > 222.73.211.215.http: F 797:797(0) ack 327 win 32605

21:43:11.759111 IP 222.73.211.215.http > 218.1.57.236.54049: . ack 798 win 59

  • 我们先看一下,第6~8行,跟上次示例不一样的是,服务端httpd守护进程发完响应后,没有立即主动关闭tcp连接。
  • 第8行,结合第6行,我们可以看到,5分钟(300s)后,服务端主动关闭这个tcp连接。这个时间,正是我们设置的keepalive_timeout的时间。
  • 由此可见,设置了keepalive_timout时间情况下,一个socket建立到释放需要的时间是多了keepalive_timeout时间。
  3.当keepalive_timeout时间大于0,并且在同一个tcp连接发送多个http响应。这里为了便于分析,我们将keepalive_timeout设置为180s
 通过这个测试,我们想弄清楚,keepalive_timeout是从第一个响应结束开启计时,还是最后一个响应结束开启计时。测试结果证实是后者,这里,我们每隔120s发一次请求,通过一个tcp连接发送了3个请求。
# tcpdump -n host 218.1.57.236 and port 80   22:43:57.102448 IP 218.1.57.236.49955 > 222.73.211.215.http: S 4009392741:4009392741(0) win 65535

22:43:57.102527 IP 222.73.211.215.http > 218.1.57.236.49955: S 4036426778:4036426778(0) ack 4009392742 win 5840

22:43:57.111337 IP 218.1.57.236.49955 > 222.73.211.215.http: . ack 1 win 32768

22:43:57.111522 IP 218.1.57.236.49955 > 222.73.211.215.http: P 1:797(796) ack 1 win 32768

22:43:57.111530 IP 222.73.211.215.http > 218.1.57.236.49955: . ack 797 win 59

22:43:59.114663 IP 222.73.211.215.http > 218.1.57.236.49955: P 1:326(325) ack 797 win 59

22:43:59.350143 IP 218.1.57.236.49955 > 222.73.211.215.http: . ack 326 win 32605

22:45:59.226102 IP 218.1.57.236.49955 > 222.73.211.215.http: P 1593:2389(796) ack 650 win 32443

22:45:59.226109 IP 222.73.211.215.http > 218.1.57.236.49955: . ack 2389 win 83

22:46:01.227187 IP 222.73.211.215.http > 218.1.57.236.49955: P 650:974(324) ack 2389 win 83

22:46:01.450364 IP 218.1.57.236.49955 > 222.73.211.215.http: . ack 974 win 32281

22:47:57.377707 IP 218.1.57.236.49955 > 222.73.211.215.http: P 3185:3981(796) ack 1298 win 32119

22:47:57.377714 IP 222.73.211.215.http > 218.1.57.236.49955: . ack 3981 win 108

22:47:59.379496 IP 222.73.211.215.http > 218.1.57.236.49955: P 1298:1622(324) ack 3981 win 108

22:47:59.628964 IP 218.1.57.236.49955 > 222.73.211.215.http: . ack 1622 win 32768

22:50:59.358537 IP 222.73.211.215.http > 218.1.57.236.49955: F 1622:1622(0) ack 3981 win 108

22:50:59.367911 IP 218.1.57.236.49955 > 222.73.211.215.http: . ack 1623 win 32768

22:50:59.686527 IP 218.1.57.236.49955 > 222.73.211.215.http: F 3981:3981(0) ack 1623 win 32768

22:50:59.686531 IP 222.73.211.215.http > 218.1.57.236.49955: . ack 3982 win 108

    • 第一组,三个ip包表示tcp三次握手建立连接,由浏览器建立。
    • 第二组,发送第一次http请求并且得到响应,服务端守护进程输出响应之后,并没马上主动关闭tcp连接。而是启动keepalive_timout计时。
    • 第三组,2分钟后,发送第二次http请求并且得到响应,同样服务端守护进程也没有马上主动关闭tcp连接,重新启动keepalive_timout计时。
    • 第四组,又2分钟后,发送了第三次http请求并且得到响应。服务器守护进程依然没有主动关地闭tcp连接(距第一次http响应有4分钟了,大于keepalive_timeout值),而是重新启动了keepalive_timout计时。
    • 第五组,跟最后一个响应keepalive_timeout(180s)内,守护进程再没有收到请求。计时结束,服务端守护进程主动关闭连接。4次挥手后,服务端进入TIME_WAIT状态。
 这说明,当设定了keepalive_timeout,一个socket由建立到释放,需要时间是:tcp建立 + (最后一个响应时间 – 第一个请求时间) + tcp关闭 + 2MSL。红色加粗表示每一次请求发送时间、每一次请求脚本执行时间、每一次响应发送时间,还有两两请求相隔时间。进一步测试,正在关闭或者 TIME_WAIT状态的tcp连接,不能传输http请求和响应。即,当一个连接结束keepalive_timeout计时,服务端守护进程发送第一 个FIN标志ip包后,该连接不能再使用了。

http keep-alive与tcp keep-alive

 http keep-alive与tcp keep-alive,不是同一回事,意图不一样。http keep-alive是为了让tcp活得更久一点,以便在同一个连接上传送多个http,提高socket的效率。而tcp keep-alive是TCP的一种检测TCP连接状况的保鲜机制。tcp keep-alive保鲜定时器,支持三个系统内核配置参数:   echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time

echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl

echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes

keepalive是TCP保鲜定时器,当网络两端建立了TCP连接之后,闲置idle(双方没有任何数据流发送往来)了 tcp_keepalive_time后,服务器内核就会尝试向客户端发 送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应用、主机不可达等等)。如果没有收到对方的回答(ack包),则会在 tcp_keepalive_intvl后再次尝试发送侦测包,直到收到对对方的ack,如果一直没有收到对方的ack,一共会尝试 tcp_keepalive_probes次,每次的间隔时间在这里分别是15s, 30s, 45s, 60s, 75s。如果尝试tcp_keepalive_probes,依然没有收到对方的ack包,则会丢弃该TCP连接。TCP连接默认闲置时间是2小时,一般 设置为30分钟足够了。

也就是说,仅当nginx的keepalive_timeout值设置高于tcp_keepalive_time,并且距此tcp连接传输的最后一个 http响应,经过了tcp_keepalive_time时间之后,操作系统才会发送侦测包来决定是否要丢弃这个TCP连接。一般不会出现这种情况,除 非你需要这样做。

keep-alive与TIME_WAIT

 使用http keep-alvie,可以减少服务端TIME_WAIT数量(因为由服务端httpd守护进程主动关闭连接)。道理很简单,相较而言,启用keep-alive,建立的tcp连接更少了,自然要被关闭的tcp连接也相应更少了。

最后

我想用一张示意图片来说明使用启用keepalive的不同。另外,http keepalive是客户端浏览器与服务端httpd守护进程协作的结果,所以,我们另外安排篇幅介绍不同浏览器的各种情况对keepalive的利用。tips1000_2015-12-27_06-59-39

171 Responses to “ http keepalive是怎么回事 ”

  1. chocopie说道:

    kwB2sn Perfect work you have done, this site is really cool with good information.

  2. i love pron说道:

    jAfyz5 Well I definitely liked studying it. This information provided by you is very useful for good planning.

  3. see pron说道:

    MX4NpG I think, that you are mistaken. Let as discuss. Write to me in PM, we will communicate.

  4. Wonderful paintings! That is the type of info that should be shared across the net. Shame on Google for no longer positioning this post upper! Come on over and visit my site. Thanks =)

  5. coloring page说道:

    Some genuinely choice content on this site, bookmarked.

  6. Some truly prime articles on this web site , bookmarked.

  7. hamptonsite说道:

    you ave an amazing blog right here! would you wish to make some invite posts on my weblog?

  8. in a search engine as natural or un-paid (organic) search results.

  9. W88说道:

    Whoa! This blog looks just like my old one! It as on a totally different subject but it has pretty much the same page layout and design. Wonderful choice of colors!

  10. woking cab说道:

    Thanks again for the post.Really looking forward to read more. Want more.

  11. You can certainly see your skills in the work you write. The world hopes for more passionate writers such as you who aren at afraid to say how they believe. At all times follow your heart.

  12. You made some decent points there. I did a search on the issue and found most persons will approve with your website.

  13. explore说道:

    Major thankies for the blog.Much thanks again. Cool.

  14. Thanks again for the blog article.Really looking forward to read more. Cool.

  15. Nwokolo说道:

    Your style is so unique compared to other people I ave read stuff from. Thank you for posting when you ave got the opportunity, Guess I will just bookmark this page.

  16. klm promo code说道:

    Way cool! Some very valid points! I appreciate

  17. budget dumpster说道:

    Thank you for your article.Really thank you! Fantastic.

  18. Terrific work! This is the type of info that are meant to be shared across the net. Shame on Google for now not positioning this publish higher! Come on over and discuss with my website. Thanks =)

  19. My wife and i were absolutely contented Albert managed to round up his preliminary research while using the precious recommendations he acquired while using the weblog. It is now and again perplexing to simply be giving freely solutions which often most people might have been trying to sell. So we do know we need you to appreciate for that. The specific illustrations you made, the simple blog navigation, the relationships you will help foster – it is mostly impressive, and it’s facilitating our son in addition to us recognize that that matter is awesome, and that’s particularly serious. Thanks for the whole thing!

  20. Why would hydrocodone being Schedule III? result in higher prescription rates compared to Schedule II drugs?

  21. This is really interesting, You are a very skilled blogger. I ave joined your rss feed and look forward to seeking more of your fantastic post. Also, I ave shared your website in my social networks!

  22. It’а†s really a cool and helpful piece of info. I am satisfied that you shared this useful info with us. Please stay us informed like this. Thank you for sharing.

  23. Im thankful for the article post.Much thanks again. Will read on

  24. Emmanuel Ekanem说道:

    I wouldn at mind composing a post or elaborating on most

  25. fashion说道:

    Thanks for another wonderful post. Where else could anyone get that type of information in such an ideal way of writing? I have a presentation next week, and I am on the look for such information.

  26. Major thankies for the post.Really looking forward to read more. Will read on

  27. Lastly, an issue that I am passionate about. I ave looked for data of this caliber for your last numerous hours. Your internet site is drastically appreciated.

  28. This is really interesting, You certainly are a very qualified blogger. I possess joined your rss and enjoy seeking more of one as fantastic post. Also, I have got shared your blog in my myspace!

  29. that should outweigh Owens touchdowns. I think all of it

  30. Crochet poncho说道:

    I will immediately grab your rss as I can not find your email subscription link or e-newsletter service. Do you ave any? Please let me know in order that I could subscribe. Thanks.

  31. Tapete说道:

    You made some decent points there. I did a search on the subject matter and found most guys will go along with with your site.

  32. online说道:

    You obtained a really useful blog I ave been here reading for about an hour. I am a newbie as well as your achievement is really considerably an inspiration for me.

  33. white shoes说道:

    I view something really special in this internet site.

  34. value说道:

    Thanks for sharing, this is a fantastic article post.Really thank you! Really Cool.

  35. Tel Aviv Escorts说道:

    Thanks for sharing, this is a fantastic article. Keep writing.

  36. Thank you ever so for you article post. Awesome.

  37. Waec expo说道:

    I truly appreciate this post.Thanks Again.

  38. Very informative article.Thanks Again. Want more.

  39. Thank you for your blog post.Much thanks again. Want more.

  40. click here说道:

    Wow, great article post.Really thank you! Much obliged.

  41. line? Are you sure concerning the supply?

  42. tm objection说道:

    You have remarked very interesting details ! ps nice web site. Loneliness seems to have become the great American disease. by John Corry.

  43. very couple of web-sites that occur to become comprehensive beneath, from our point of view are undoubtedly well really worth checking out

  44. kabansale watch was too easy before, however right now it is pretty much impossible

  45. Thanks so much for the article.Really looking forward to read more. Want more.

  46. topic, however, you sound like you know what you are talking

  47. You ought to really control the comments listed here

  48. You have brought up a very fantastic details , thankyou for the post.

  49. I really liked your blog post.Much thanks again. Really Great.

  50. resorts说道:

    Just to let you know your web page looks a little bit unusual in Safari on my notebook with Linux.

  51. Thank you ever so for you article.Really looking forward to read more. Cool.

  52. so I guess I all just sum it up what I wrote and say, I am thoroughly enjoying your blog.

  53. This blog is without a doubt entertaining and also factual. I have picked up a bunch of useful stuff out of this amazing blog. I ad love to return again and again. Cheers!

  54. wholesale说道:

    I truly appreciate this article.Really looking forward to read more. Cool.

  55. This is very interesting, You are a very skilled blogger. I ave joined your feed and look forward to seeking more of your great post. Also, I have shared your website in my social networks!

  56. What as up, I read your new stuff daily. Your writing style is awesome, keep doing what you are doing!

  57. You have made some really good points there. I looked on the internet for more information about the issue and found most people will go along with your views on this website.

  58. You should take part in a contest for one of the greatest blogs on the net. I will highly recommend this website!

  59. manna说道:

    Major thanks for the blog post. Want more.

  60. She has chosen a double breasted trench coat was not worse then of those ones

  61. view说道:

    This blog is amazaing! I will be back for more of this !!! WOW!

  62. Really informative article post.Much thanks again. Really Cool.

  63. the ice fishing there are two things that you might experience.

  64. I’а†ve recently started a site, the information you offer on this web site has helped me greatly. Thank you for all of your time & work.

  65. please take a look at the web-sites we follow, including this one, because it represents our picks through the web

  66. visit website说道:

    pretty valuable stuff, overall I feel this is worthy of a bookmark, thanks

  67. Okey说道:

    Voyance web arnaque theme astrologique gratuit en ligne

  68. check out说道:

    Thank you ever so for you article.Really thank you! Really Cool.

  69. Say, you got a nice blog.Really thank you! Cool.

  70. ads说道:

    So pleased to have located this submit.. My personal internet searching seem complete.. thank you. Wonderful feelings you have here.. I value you sharing your point of view..

  71. visit说道:

    Looking forward to reading more. Great article post.Really looking forward to read more. Really Cool.

  72. Very neat article post.Really looking forward to read more. Really Great.

  73. Darin Schenewerk说道:

    Oh my goodness! an excellent write-up dude. Many thanks Nevertheless I will be experiencing issue with ur rss . Don’t know why Struggling to enroll in it. Could there be anyone obtaining identical rss problem? Anyone who knows kindly respond. Thnkx

  74. You produced some decent points there. I looked on-line for the problem and situated most people will associate with along with your internet site.

  75. There as certainly a great deal to learn about this topic. I love all of the points you made.

  76. check here说道:

    This is a good tip especially to those fresh to the blogosphere. Brief but very precise info Thank you for sharing this one. A must read post!

  77. go there说道:

    This particular blog is no doubt entertaining and besides informative. I have picked a bunch of useful things out of this blog. I ad love to visit it again and again. Thanks a bunch!

  78. You are my intake, I own few web logs and very sporadically run out from brand . Analyzing humor is like dissecting a frog. Few people are interested and the frog dies of it. by E. B. White.

  79. Really appreciate you sharing this article.Really thank you! Really Cool.

  80. Well My spouse and i definitely enjoyed studying the idea. This idea procured simply by you is very constructive forever planning.

  81. There is noticeably a bunch to get on the subject of this. I deem you completed various fantastically good points in skin texture also.

  82. Thank you, I ave recently been searching for information about this topic for ages and yours is the greatest I ave discovered till now. But, what about the bottom line? Are you sure about the source?

  83. your RSS. I don at know why I am unable to subscribe to it. Is there anyone else having similar RSS issues? Anyone that knows the answer can you kindly respond? Thanks!!

  84. sbobet说道:

    I really love your website.. Excellent colors & theme. Did you develop this web site yourself?

  85. I value the article.Really looking forward to read more. Awesome.

  86. I’ve been absent for a while, but now I remember why I used to love this web site. Thank you, I’ll try and check back more frequently. How frequently you update your website?

  87. I visited a lot of website but I believe this one holds something special in it in it

  88. It as hard to find knowledgeable people for this topic, but you sound like you know what you are talking about! Thanks

  89. There is a psychological vitamin between the virtual job and social functioning in following these components.

  90. micheal说道:

    Hi, Neat post. There’s an issue with your website
    in internet explorer, may check this? IE still is the marketplace
    chief and a large portion of folks will leave
    out your fantastic writing due to this problem.

  91. while and yours is the best I have found out till now.

  92. It as hard to find educated people on this topic, but you seem like you know what you are talking about! Thanks

  93. Valuable Website I have been checking out some of your stories and i can state pretty good stuff. I will surely bookmark your website.

  94. Very good post. I am experiencing many of these issues as well..

  95. Wow, marvelous blog layout! How long have you been blogging for? you made blogging look easy. The overall look of your site is fantastic, let alone the content!. Thanks For Your article about sex.

  96. Looking forward to reading more. Great blog post. Great.

  97. we came across a cool website which you could appreciate. Take a look for those who want

  98. There is a bundle to find out about this. You made nice points also.

  99. My brother recommended I might like this website. He was totally right. This post truly made my day. You cann at imagine just how much time I had spent for this information! Thanks!

  100. Your style is very unique in comparison to other people I ave read stuff from. I appreciate you for posting when you have the opportunity, Guess I all just bookmark this web site.

  101. That is a really good tip especially to those new to the blogosphere. Short but very precise information Many thanks for sharing this one. A must read post!

  102. Way cool! Some extremely valid points! I appreciate you writing this write-up plus the rest of the site is also very good.

  103. i love pron说道:

    Amovao Its like you read my mind! You appear to know so much

  104. I saw a lot of website but I conceive this one has something special in it in it

  105. mia pron khalifa说道:

    8w2py0 Im thankful for the blog post.Much thanks again. Much obliged.

  106. i love pron说道:

    7uGSJx pretty useful material, overall I feel this is well worth a bookmark, thanks

  107. see pron说道:

    1WPKIC Thank you ever so for you post.Really thank you! Really Cool.

  108. i love pron说道:

    rJCerW This information is worth everyone as attention. Where can I find out more?

  109. I’а†ve recently started a web site, the information you provide on this web site has helped me greatly. Thanks for all of your time & work.

  110. I think this is a real great article.Really looking forward to read more. Want more.

  111. This particular blog is definitely interesting and besides diverting. I have picked up many helpful things out of this amazing blog. I ad love to visit it again and again. Cheers!

  112. Looking around I like to look in various places on the web, regularly I will go to Digg and follow thru

  113. This web site really has all of the info I wanted about this subject and didn at know who to ask.

  114. Thanks for sharing, this is a fantastic blog.Much thanks again. Much obliged.

  115. This is one awesome blog article.Thanks Again. Great.

  116. bistro masa说道:

    There as certainly a great deal to find out about this issue. I like all of the points you made.

  117. real child porn说道:

    Muchos Gracias for your article. Fantastic.

  118. link vao 188bet说道:

    Well I truly liked reading it. This tip provided by you is very useful for proper planning.

  119. Beingbar eyewear说道:

    You may have some real insight. Why not hold some kind of contest for your readers?

  120. ceti说道:

    I truly appreciate this blog.Really looking forward to read more. Really Cool.

  121. porn说道:

    Perfect piece of work you have done, this site is really cool with superb info.

  122. Wow! Thank you! I always wanted to write on my website something like that. Can I take a portion of your post to my site?

  123. Perfect work you have done, this internet site is really cool with good info.

  124. crypto说道:

    If you happen to be interested feel free to shoot me an email.

  125. Major thankies for the article post.Much thanks again. Want more.

  126. on other sites? I have a blog centered on the same information you discuss and would really like to

  127. I truly appreciate this blog post.Much thanks again. Much obliged.

  128. Escorts Miami说道:

    Source Of course, what a great blog and enlightening posts, I surely will bookmark your site.Best Regards!

  129. Utterly written articles, Really enjoyed looking at.

  130. I value the article post.Really thank you! Keep writing.

  131. Im grateful for the post.Thanks Again. Great.

  132. is equally important because there are so many more high school julio jones youth jersey players in the

  133. Keep up the wonderful piece of work, I read few blog posts on this web site and I believe that your site is real interesting and has got bands of wonderful information.

  134. 먹튀폴리스说道:

    Im no expert, but I think you just made an excellent point. You undoubtedly fully understand what youre talking about, and I can really get behind that. Thanks for being so upfront and so honest.

  135. pengeluaran hk说道:

    I like what you guys are up also. Such smart work and reporting! Carry on the superb works guys I’ve incorporated you guys to my blogroll. I think it’ll improve the value of my website :).

  136. Of course, what a magnificent website and educative posts, I surely will bookmark your website.Best Regards!

  137. saffron vietnam说道:

    Well I truly enjoyed reading it. This subject provided by you is very effective for proper planning.

  138. cheap mp3说道:

    Utterly indited subject material, Really enjoyed studying.

  139. cat说道:

    After reading many of your blogposts I staleness say i launch this fact one to mostly be top notch. I soul a weblog also and require to repost a few shears of your articles on my own diary site. Should it be alright if I use this as eternal I own testimonial your web blog or create a inward unification to your article I procured the snipping from? If not I realise and could not do it without having your tolerance . I change accumulation scarred this article to sound and zynga calculate intended for remark. Anyway realize it either way!

  140. Very good info. Lucky me I ran across your website by accident (stumbleupon). I ave book-marked it for later!

  141. Outstanding post however , I was wanting to know if you could write a litte more on this subject? I ad be very thankful if you could elaborate a little bit more. Thank you!

  142. Education说道:

    You made some clear points there. I did a search on the subject and found most individuals will agree with your site.

  143. cheap mp3说道:

    Incredible points. Outstanding arguments. Keep up the amazing spirit.

  144. Very interesting points you have mentioned, regards for putting up.

  145. This is really interesting, You are a very skilled blogger. I ave joined your rss feed and look forward to seeking more of your excellent post. Also, I ave shared your web site in my social networks!

  146. There is also one other technique to increase traffic in favor of your website that is link exchange, thus you also try it

  147. TSC说道:

    Incredible points. Sound arguments. Keep up the great spirit.

  148. 토토사이트说道:

    This is my first time go to see at here and i am really happy to read everthing at alone place.|

  149. This is one awesome post.Much thanks again.

  150. 바다 이야기说道:

    Souls in the Waves Great Morning, I just stopped in to go to your website and assumed I would say I enjoyed myself.

  151. usually posts some extremely exciting stuff like this. If you are new to this site

  152. buy albuterol说道:

    You are my inspiration, I have few web logs and very sporadically run out from post .

  153. Sometimes I also see something like this, but earlier I didn`t pay much attention to this!

  154. Major thanks for the post.Thanks Again. Really Great.

  155. You made some decent points there. I looked on the internet for the subject and found most guys will consent with your blog.

  156. Nonton Anime说道:

    Thank you for the article. I’ve truly thought about it before but never wanted to do anything about it. I do think because of my lack of complete understanding. Each day, however, I’m noticing more and more people getting frustrated because they think it is very complicated to understand. Exactly what really encouraged me personally again, however, seemed to be your rationale men and women would like to discuss the situation once they see their own friends commenting on the same thing. That is just how knowledge increases.

  157. Way cool! Some extremely valid points! I appreciate you penning this post plus the rest of the website is extremely good.

  158. 바다이야기说道:

    You made some good points there. I looked on the internet for the subject matter and found most individuals will go along with with your blog.

  159. That as what i call аАТ’аЂа‹great postаАТ’аЂа›. Thank you so much.

  160. This is one awesome blog.Thanks Again. Fantastic.

  161. click here说道:

    Wow, superb blog layout! How long have you been blogging for? you made blogging look easy. The overall look of your website is excellent, let alone the content!

  162. Thank you for what you might have. This really is the very best submit IaаАа’б‚Т€ТšаЂаŒаАа’б‚Т€ТžаБТžve study

  163. che tac qua tang说道:

    Incredible! This blog looks just like my old one! It as on a totally different topic but it has pretty much the same page layout and design. Wonderful choice of colors!

  164. qua tang ma vang说道:

    you put to make such a magnificent informative website.

  165. Im thankful for the blog article. Keep writing.

  166. Very interesting info!Perfect just what I was looking for!

  167. seo tool说道:

    Thanks so much for the post. Really Cool.

  168. Some really fantastic info , Gladiolus I detected this.

  169. 다자바说道:

    Judging by the way you compose, you seem like a professional writer.,.;*~

  170. It as onerous to find knowledgeable folks on this matter, however you sound like you already know what you are speaking about! Thanks

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>