欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
系列文章链接
- 《Java扩展Nginx之一:你好,nginx-clojure》
- 《Java扩展Nginx之二:编译nginx-clojure源码》
本篇概览
- 经历了前面两篇的入门和编译源码之后,从本篇起,咱们用理论结合实战的方式进入系统的nginx-clojure学习之旅
- 作为《Java扩展Nginx》系列的第三篇,本文会与大家一起了解nginx-clojure基本的配置项,通过它们来掌控和优化自己的应用,以下是本篇的主要内容:
- java进程数量
- 配置项:jvm_path
- 配置项:jvm_classpath
- 配置项:jvm_var
- 配置项:jvm_options
- 配置项:jvm_handler_type
java进程数量
- 当nginx运行起来后,究竟有多少个java进程?这个应该是最需要弄清楚的问题,举个简单例子,当你的java代码在处理请求的时候,如果把一些信息放在内存中,想留给下一次请求使用,此时可能会让你失望了,因为处理下一个请求的进程可能是另一个
- 熟悉nginx的读者对配置项<font color="blue">worker_processes</font>应该不陌生,这是工作进程数的配置,而nginx-clojure的java进程数量就<font color="red">等于</font>worker_processes的值
- 接下来实际验证一下,看看当前环境的nginx配置,如下图,worker_processes等于1:
- 此时执行jps命令,如下图,只有一个进程<font color="blue">3183</font>:
- 现在将worker_processes改为10,执行<font color="blue">nginx -s reload</font>重新加载配置,然后用jps查看,如下图,此时已经有了10个java进程:
接下来是nginx.conf中与java有关的配置项,掌握了它们,我们才能将系统调整到最优状态
配置项:jvm_path
- jvm_path是个http配置项,一般情况下,咱们可以设置为<font color="blue">auto</font>,如果您的环境有多个jvm,也可以指定其中的一个,具体设置方法如下(是参考设置,您要根据自己环境的情况调整),
- windows:C:/Program Files/Java/jdk1.7.0_25/jre/bin/server/jvm.dll
- macosx:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/server/libjvm.dylib
- ubuntu:/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/libjvm.so
centos:/usr/java/jdk1.6.0_45/jre/lib/amd64/server/libjvm.so
配置项:jvm_classpath
- jvm_classpath是个http配置项,指定了java进程的classpath,咱们来看看nginx-clojure官方安装包的内部结构,如下图红框,有<font color="blue">libs</font>和<font color="blue">jars</font>两个目录,里面都有jar文件:
再看nginx-clojure官方安装包中的配置文件,如下图红框,与前面的两个文件夹对应,也就是说这两个文件夹内的所有jar都能被java进程加载:
配置项:jvm_var
- <font color="blue">jvm_var</font>是个http配置项,用来在配置中定义一个变量,可以个其他变量使用
假设我的<font color="blue">jvm_classpath</font>值原本是<font color="red">"/usr/local/nginx/libs/*:/usr/local/nginx/jars/"</font>,可以用jvm_var做改造,将成下面这样,而jvm_classpath的真实值保持不变:
jvm_var nginxHome '/usr/local/nginx'; jvm_classpath "#{nginxHome}/libs/*:#{nginxHome}/jars/*";
咱们在写脚本和配置的时候经常会用到变量,jvm_var正好派上用场
配置项:jvm_options
jvm_optionsoptions是个http配置项,options参数是启动jvm最常用的参数了,这里的jvm_options承担的也是这个角色,不用多说,来看几个实际配置,聪明的您肯定秒懂:
# 启动堆内存 jvm_options -Xms250m; # 最大堆内存 jvm_options -Xmx1024m; # 线程栈大小 jvm_options -Xss128k; # 系统变量,代码中可以获取改变量的值 jvm_options -Djava.awt.headless=true;
配置项:jvm_handler_type
- jvm_handler_type是个http配置项,至于它的作用,咱们先来看一个location配置,如下图红框,需要有一个<font color="blue">content_handler_type</font>配置项指定类型:
- 如果有多个location,而且都是java类型,岂不是每个location中都要写一个<font color="blue">content_handler_type</font>了?这时候,可以在http配置中增加<font color="blue">jvm_handler_type</font>配置项,指定location中的默认content_handler_type值,这样location中的content_handler_type就可以不写了,如下图:
以上就是本文要介绍的所有配置项了,虽然还剩下很多配置项未提到,例如jvm_init_handler_name、jvm_init_handler_code等,但是这些都是handle相关的配置项,而各种丰富的handler正是nginx-clojure的重要知识点,所以,这些配置会留待后面的文章中,与handler一同讲解。
欢迎关注思否:程序员欣宸
学习路上,你不孤单,欣宸原创一路相伴...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。