• java日常管理


    JRE、JDK和JVM简述

    JVM

    JVM是Java Virtual Machine(Java虚拟机)的缩写,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。 JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(.class文件)。

    JRE

    JRE是java runtime environment(java运行环境)的缩写。光有JVM还不能让class文件执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。
    在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了(jre里有运行.class的java.exe)。
    JRE是Sun公司发布的一个更大的系统,它里面就有一个JVM。JRE就与具体的CPU结构和操作系统有关,是运行Java程序必不可少的(除非用其他一些编译环境编译成.exe可执行文件……),JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行

    JDK

    JDK是java development kit(java开发工具包)的缩写。每个学java的人都会先在机器上装一个JDK,那 让我们看一下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。

    • bin:最主要的是编译器(javac.exe)
    • include:java和JVM交互用的头文件
    • lib:类库
    • jre:java运行环境
      (注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选jre路径就ok了。

    JDK,JRE,JVM三者关系概括如下:

    JDK是java程序开发时用的开发工具包,其内部也有java运行环境JRE。
    JRE是java程序运行时需要的运行环境,就是说如果你光是运行java程序而不是去搞开发的话,只安装JRE就能运行已经存在的java程序了。
    JDk、JRE内部都包含java虚拟机JVM,java虚拟机内部包含许多应用程序的类的解释器和类加载器等等。

    java 环境管理

    jdk环境变量

    /etc/profile.d/java.sh

    # /etc/profile.d/java.sh - set i18n stuff
    
    export JAVA_HOME=/home/d/java/default
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
    export PATH=$JAVA_HOME/bin:$PATH
    
    

    jar包管理

    什么是jar包
    JAR(Java Archive)是Java的归档文件,它是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。
    
    如何打/解包
    使用jdk/bin/jar.exe工具,配置完环境变量后直接使得jar命令即可。
    
    jar命令格式
    jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名...
    
    {ctxu},这四个参数必须选选其一。
    
    [v f m e 0 M i],这几个是可选参数,文件名也是必须的。
    
    参数	说明
    -c	创建一个jar包
    -t	显示jar中的内容列表
    -x	解压jar包
    -u	添加文件到jar包中
    -f	指定jar包的文件名
    -v	输出详细报告
    -m	指定MANIFEST.MF文件
    -0	生成jar包时不压缩内容
    -M	不生成清单文件MANIFEST.MF
    -i	为指定的jar文件创建索引文件
    -C	可在相应的目录下执行命令
    关于MANIFEST.MF定义:
    https://baike.baidu.com/item/MANIFEST.MF
    
    演示
    往jar包添加文件
    jar uf xxx.jar BOOT-INF/classes/application.yml
    
    解压jar包
    jar -xvf xxx.jar
    
    打jar包,不生成清单文件,不压缩
    jar -cvfM0 xxx.jar BOOT-INF/ META-INF/ org/
    
    或者
    jar -cvfM0 xxx.jar *
    

    Tomcat管理

    startenv.sh

    #!/bin/sh
    export TOMCAT_USER="tomcat"
    JAVA_OPTS="-server -Xms12G -Xmx12G"
    JAVA_OPTS="$JAVA_OPTS -XX:InitialHeapSize=12G"
    JAVA_OPTS="$JAVA_OPTS -XX:AutoBoxCacheMax=200000"
    JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
    JAVA_OPTS="$JAVA_OPTS -XX:+UseStringDeduplication"
    JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC"
    JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails"
    JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDateStamps"
    JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCTimeStamps"
    JAVA_OPTS="$JAVA_OPTS -XX:+PrintCommandLineFlags"
    JAVA_OPTS="$JAVA_OPTS -XX:+PrintTenuringDistribution"
    JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCApplicationStoppedTime"
    JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
    JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=$CATALINA_BASE/logs/"
    JAVA_OPTS="$JAVA_OPTS -Xloggc:$CATALINA_BASE/logs/gc.log"
    JAVA_OPTS="$JAVA_OPTS -Dapp.logs=$CATALINA_BASE/logs"
    JAVA_OPTS="$JAVA_OPTS -Dapp.cache=$CATALINA_BASE/cache"
    JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
    JAVA_OPTS="$JAVA_OPTS -Dvertx.cacheDirBase=/tmp"
    JAVA_OPTS="$JAVA_OPTS -javaagent:/home/d/pinpoint-agent-1.8.4/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=xcsale15 -Dpinpoint.applicationName=xcsale"
    export JAVA_OPTS
    chown -R tomcat:tomcat $CATALINA_BASE/logs
    chown -R tomcat:tomcat $CATALINA_BASE/cache
    chown -R tomcat:tomcat $CATALINA_BASE/conf
    chown -R tomcat:tomcat $CATALINA_BASE/work
    chown -R tomcat:tomcat $CATALINA_BASE/temp
    
    chown -R tomcat:tomcat $CATALINA_BASE/webapps/xc_sale/WEB-INF/schema
    

    Tomcat优化

    更改Tomcat默认header大小

    tomcat的conf/server.xml文件里,修改Connector标签,添加maxHttpHeaderSize="16384"
    修改后的示例如下:
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" 
        maxHttpHeaderSize="16384"/>
    

    JVM排查

    使用下面的命令dump出来几个文件(脚本sfa_check_v1.bat中已含有此功能)

    #查看JAVA内存状态
    jmap -heap  11111 > jmap_heap_11111.txt
    #查看JVM堆中对象详细占用情况
    jmap -histo 11111 > jmap_histo_11111.txt
    #导出整个JVM中内存信息
    jmap -dump:format=b,file=jmap_dump_11111.dump 11111
    #查看JVM 中线程的运行状况,包括锁等待,线程是否在运行
    jstack -F  11111 > jstack_F_11111.txt
    #Prints additional information about locks
    jstack -l 11111 > jstack_l_11111.txt
    

    注:若导出提示存储空间不足,需要加-F……,需要切换至tomcat所在的终端进行操作。

  • 相关阅读:
    金蝶数据库执行语句
    金蝶 更新价格分录表触发器
    金蝶触发器,生成条码信息
    SQL从中文中获取拼音首字母
    C语言 typedef用法
    这姑娘漂亮不,说实话,有糖吃
    条码开发的意义在哪里
    ERP开发,重点不在功能
    金蝶出入库数据库表里加字段后出现的问题解决
    解决金蝶未检测到K/3许可文件,并且该账套已超过演示版期限问题
  • 原文地址:https://www.cnblogs.com/happy-king/p/15171688.html
Copyright © 2020-2023  润新知