欢迎访问我的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官方安装包的内部结构,如下图红框,有libs和jars两个目录,里面都有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之三:基础配置项的更多相关文章

  1. Nginx——1.基础知识

    Nginx——1.基础知识 作为高速.轻量.高性能等优点集于一身的服务器,Nginx在近些年迅速发展并不断扩大市场份额,甚至在最近其市场份额一举超过微软的IIS,跃身到第二位,仅次于Apache. 但 ...

  2. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  3. Java回顾之Spring基础

    第一篇:Java回顾之I/O 第二篇:Java回顾之网络通信 第三篇:Java回顾之多线程 第四篇:Java回顾之多线程同步 第五篇:Java回顾之集合 第六篇:Java回顾之序列化 第七篇:Java ...

  4. nginx的基础应用

    nginx的基础应用 一.简介 今天我们将介绍一些nginx的简单应用,启动.停止nginx,重载nginx的配置,nginx配置文件的格式,如何配置nginx服务静态资源,如何配置nginx作为反向 ...

  5. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  6. spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情

    <spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zu ...

  7. Java并发编程之三:volatile关键字解析 转载

    目录: <Java并发编程之三:volatile关键字解析 转载> <Synchronized之一:基本使用>   volatile这个关键字可能很多朋友都听说过,或许也都用过 ...

  8. nginx实现基础web

    目录 nginx实现基础web 什么是lnmp lnmp架构如何工作 Nginx与Fast-CGO详细工作流程 LNMP环境准备 一,部署LNMP 1.使用nginx官方源 2.创建nginx用户 3 ...

  9. Nginx web基础入门

    目录 Nginx web基础入门 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 日志格式 game日志记录实战 日志切割 手写虚拟 ...

  10. Nginx 常用基础模块

    目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...

随机推荐

  1. Ubuntu系统Flameshot使用问题

    Ubuntu系统Flameshot使用问题 系统:Ubuntu22.04 问题:使用Flameshot,每次都会先截取整个屏幕,提示需要先分享,再使用Flameshot的功能 安装Flameshot ...

  2. 通过命令快速找到python的路径

    查询Python 首先我们需要知道Python安装路径,可以在命令行中逐行执行下面代码 python3 import sys sys.executable

  3. C# 从0到实战 命名空间

    什么是命名空间 命名空间是C#为了解决类名冲突而产生的一种方案,通过特定的前缀来标识一个类,使得编程者可以在自己的命名空间中自由使用各种类名,这很类似于Java中的包. 一般新手学习C#都会使用一个 ...

  4. 微信小程序隐藏页面滚动条

    开发小程序时,经常会碰到页面长度超过屏幕高度,然后下拉时会出现滚动条,对于一些有强迫症的人来说是不可忍受的. 网上看了好多,写的.都评论有起作用或者不起作用的. 我在这分享一个全局隐藏滚动条的方式. ...

  5. GPT-NER:通过大型语言模型的命名实体识别

    讲在前面,chatgpt出来的时候就想过将其利用在信息抽取方面,后续也发现了不少基于这种大语言模型的信息抽取的论文,比如之前收集过的: https://github.com/cocacola-lab/ ...

  6. 3385. 【NOIP2013模拟】黑魔法师之门

    3385. [NOIP2013模拟]黑魔法师之门 题目大意: 做法: 代码: 题目大意: 给你一个无向无权图,每次询问加入一条边问你图中每个点的度数大于零且都是偶数的子图的个数对1000000009取 ...

  7. CVE-2016-3088漏洞复现

    1.背景介绍. ActiveMQ的web控制台分三个应用,admin.api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口:admin和api都 ...

  8. Sql Server 数据库事务与锁,同一事务更新又查询锁?期望大家来解惑

    我有一个People表,有三行数据: 如果我们没详细了解数据库事务执行加锁的过程中,会不会有这样一个疑问:如下的这段 SQL 开启了事务,并且在事务中进行了更新和查询操作. BEGIN TRAN up ...

  9. C# 根据窗口句柄获取窗口截图

    本章介绍如何通过句柄,截取指定窗口内容,以及截取失败的场景 一.根据窗口句柄获取窗口截图 先创建一个测试窗口程序A,显示如下: 同时我们把此窗口的句柄显示到一个文本输入框内. 1 TestBox.Te ...

  10. Spring源码:Bean的生命周期(二)

    前言 让我们继续讲解Spring的Bean实例化过程.在上一节中,我们已经讲解了Spring是如何将Bean定义加入到IoC容器中,并使用合并的Bean定义来包装原始的Bean定义.接下来,我们将继续 ...