Java扩展Nginx之三:基础配置项

java,扩展,nginx,之三,基础,配置 · 浏览次数 : 256

小编点评

**nginx-clojure 配置项详解** **jvm_path** * 默认值为 `auto`,表示从系统变量 `JAVA_HOME` 中获取路径。 * 可指定多个 JVM 的路径,以隔开即可。 **jvm_classpath** * 指定了 Java 进程的 ClassPath,包含 Java 编译器的 bin目录。 * 与 `jvm_path` 相同,但只包含 Java 编译器的 jar 和byshire 文件。 **jvm_var** * 在配置文件中定义的变量,可以被多个变量使用。 * 可以使用 `${variable_name}` 访问变量值。 **jvm_options** * 启动 JVM 的参数,例如堆内存、线程栈和系统变量。 * 使用 `-D` 开头的参数表示多个参数值。 **jvm_handler_type** * 指定了每个 location 的默认 content handler类型。 * 多个 location 可以使用同一个 `content_handler_type` 配置。 **其他配置项** * `jvm_init_handler_name` 和 `jvm_init_handler_code` 配置了 JVM 初始化器名称和代码。 * 更多配置项可参考 `nginx-clojure 官方文档` 中的注释。

正文

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 经历了前面两篇的入门和编译源码之后,从本篇起,咱们用理论结合实战的方式进入系统的nginx-clojure学习之旅
  • 作为《Java扩展Nginx》系列的第三篇,本文会与大家一起了解nginx-clojure基本的配置项,通过它们来掌控和优化自己的应用,以下是本篇的主要内容:
  1. java进程数量
  2. 配置项:jvm_path
  3. 配置项:jvm_classpath
  4. 配置项:jvm_var
  5. 配置项:jvm_options
  6. 配置项:jvm_handler_type

java进程数量

  • 当nginx运行起来后,究竟有多少个java进程?这个应该是最需要弄清楚的问题,举个简单例子,当你的java代码在处理请求的时候,如果把一些信息放在内存中,想留给下一次请求使用,此时可能会让你失望了,因为处理下一个请求的进程可能是另一个
  • 熟悉nginx的读者对配置项worker_processes应该不陌生,这是工作进程数的配置,而nginx-clojure的java进程数量就等于worker_processes的值
  • 接下来实际验证一下,看看当前环境的nginx配置,如下图,worker_processes等于1:
    在这里插入图片描述
  • 此时执行jps命令,如下图,只有一个进程3183
    在这里插入图片描述
  • 现在将worker_processes改为10,执行nginx -s reload重新加载配置,然后用jps查看,如下图,此时已经有了10个java进程:
    在这里插入图片描述
  • 接下来是nginx.conf中与java有关的配置项,掌握了它们,我们才能将系统调整到最优状态

配置项:jvm_path

  • jvm_path是个http配置项,一般情况下,咱们可以设置为auto,如果您的环境有多个jvm,也可以指定其中的一个,具体设置方法如下(是参考设置,您要根据自己环境的情况调整),
  1. windows:C:/Program Files/Java/jdk1.7.0_25/jre/bin/server/jvm.dll
  2. macosx:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/server/libjvm.dylib
  3. ubuntu:/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/libjvm.so
  4. centos:/usr/java/jdk1.6.0_45/jre/lib/amd64/server/libjvm.so

配置项:jvm_classpath

  • jvm_classpath是个http配置项,指定了java进程的classpath,咱们来看看nginx-clojure官方安装包的内部结构,如下图红框,有libsjars两个目录,里面都有jar文件:
    在这里插入图片描述
  • 再看nginx-clojure官方安装包中的配置文件,如下图红框,与前面的两个文件夹对应,也就是说这两个文件夹内的所有jar都能被java进程加载:
    在这里插入图片描述

配置项:jvm_var

  • jvm_var是个http配置项,用来在配置中定义一个变量,可以个其他变量使用
  • 假设我的jvm_classpath值原本是"/usr/local/nginx/libs/*:/usr/local/nginx/jars/",可以用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配置,如下图红框,需要有一个content_handler_type配置项指定类型:
    在这里插入图片描述
  • 如果有多个location,而且都是java类型,岂不是每个location中都要写一个content_handler_type了?这时候,可以在http配置中增加jvm_handler_type配置项,指定location中的默认content_handler_type值,这样location中的content_handler_type就可以不写了,如下图:
    在这里插入图片描述
  • 以上就是本文要介绍的所有配置项了,虽然还剩下很多配置项未提到,例如jvm_init_handler_name、jvm_init_handler_code等,但是这些都是handle相关的配置项,而各种丰富的handler正是nginx-clojure的重要知识点,所以,这些配置会留待后面的文章中,与handler一同讲解。

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

与Java扩展Nginx之三:基础配置项相似的内容:

Java扩展Nginx之三:基础配置项

与大家一起了解nginx-clojure最基本的知识点,为后面的学习夯实基础

Java扩展Nginx之一:你好,nginx-clojure

如果我说可以用java对nginx进行扩展,就像OpenResty支持Lua扩展一样,您相信吗?一起来体验nginx-clojure吧

Java扩展Nginx之二:编译nginx-clojure源码

只有掌握了nginx-clojure的编译,才能按照实际情况灵活的调整nginx的版本和模块的组合

Java扩展Nginx之四:远程调试

广大java程序员日常开发和定位问题时常用的远程调试功能,nginx-clojure也支持,来体验吧

Java扩展Nginx之五:五大handler(系列最核心)

本篇概览本文是《Java扩展Nginx》系列的最核心篇章,咱们写的代码主要集中在这些handler中

Java扩展Nginx之六:两大filter

nginx-clojure提供了两种filter,分别用于处理header和body

Java扩展Nginx之七:共享内存

使用nginx-clojure提供的共享内存工具,让多个worker之间的数据保持同步,还有类似分布式锁的能力

精选版:用Java扩展Nginx(nginx-clojure 入门)

让 Java 代码直接在 Nginx 上运行?这么有趣的功能,随本文一起来实战体验吧,图文并茂,一定能成功的那种实战

什么是 Java 字节码?采用字节码的好处是什么?

在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以, Java 程序运行时相对来说还是高效的(不过

关于《Java并发编程之线程池十八问》的补充内容

一、写在开头 在上一篇文章我们写《Java并发编程之线程池十八问》的时候,鉴于当时的篇幅已经过长,很多内容就没有扩展了,在这篇文章里对一些关键知识点进行对比补充。 二、Runnable vs Callable 在创建线程的时候,一般会选用 Runnable 和 Callable 两种方式。 【源码对