JDK

Tomcat9 Error: Could not find or load main class org.apache.catalina.startup.Bootstrap

孤者浪人 提交于 2020-08-16 16:03:11
今天因为同事要求,希望安装一个Tomcat9给他,结果发现一个问题: 首先我登录的是tomcat官网,选择source包下载,wget http://apache.fayea.com/tomcat/tomcat-9/v9.0.0.M26/src/apache-tomcat-9.0.0.M26-src.tar.gz tar -xf apache-tomcat-9.0.0.M26-src.tar.gz mv apache-tomcat-9.0.0.M26-src /mnt/tomcat cd /mnt/tomcat/bin 执行./startup.sh 结果显示,启动正常 Using CATALINA_BASE: /mnt/tomcat Using CATALINA_HOME: /mnt/tomcat Using CATALINA_TMPDIR: /mnt/tomcat/temp Using JRE_HOME: /usr/java/jdk1.8.0_77 Using CLASSPATH: /mnt/tomcat/bin/bootstrap.jar:/mnt/tomcat/bin/tomcat-juli.jar Tomcat started. 但是用netstat -lntp|grep 8080会发现tomcat根本没有启动,查看 /mnt/tomcat/logs/catalina

fullGC 频繁导致CPU飙高

喜你入骨 提交于 2020-08-16 14:46:52
鄙人上班正在摸鱼中,突然后收到领导电话服务 报 503 好吧吓死了赶紧百度 http 503 :因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求。 其含义是, 这是一个暂时情况,会有一些延误, 过 后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字(socket) 连接,在这种情况下,可能会由于套接字建立超时而产生不同的错误信息。 说白了 服务压力或者别的原因 忙不过来了 我自己组装了一笔报文 用curl 脚本发送 发现 十多秒都没返回 开始下面排查 以下所有截图都不是 demo 而是真实样例 指令TOP top: 提供实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序 load average:系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 Cpu(s):显示CPU信息 75.9%us 用户空间占用CPU百分比 0.4%sy 内核和中断占用CPU百分比 0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比 23.7%id 空闲CPU百分比 0.0%wa 等待输入输出的CPU时间百分比 0.0%hi 硬中断(Hardware IRQ)占用CPU的百分比 0.0%si 软中断(Software Interrupts

一个成都程序猿眼中的成都和天府软件园,先从蚂蚁金服说起…

廉价感情. 提交于 2020-08-16 12:25:27
这是why技术的第 57 篇原创文章 我是一个成都天府三街的程序猿,而蚂蚁金服在天府四街。 写这篇文章的时候我测试了一下,从我的工位出发,步行 6 分钟就可以走到蚂蚁金服的楼下,然后拍下这张照片: 途中会路过腾讯、字节跳动、万科、携程....... 所以,每天从天府三街地铁站下站的人特别多,这里面大概率聚集了天府软件园中最有钱的一批员工: 需要说明一下的是这篇文章不聊技术,这就是一整期的荒腔走板。文章里面我会提到成都蚂蚁金服,但是更多的,我想聊的是我眼中的成都, 和我所看见的天府软件园,蚂蚁金服只是恰好在天府软件园而已。 另外,需要严正声明的是,全文谨代表个人观点,观察角度有限。杠精勿扰。 还有,对不起 ,用标题党把你骗了进来。 我眼中的成都 我的老家并不是成都。 我对成都最早的记忆应该得追溯到小学五年级的时候,也就是 2005 年,那时在学校订阅了少年先锋报,每周五的时候都会发一期新报纸给我们。 我就是在五年级的一个周五的最后一节课上领到了报纸,然后看到了报纸上的一个硕大的标题:《成都,一座来了就不想离开的城市》,然后翻页一看还有一个标题我记得特别清楚:《成都有条街,名字叫锦里》。 里面写的什么内容我全忘记了,但是看完之后,就是朦朦胧胧的向往这个地方。就类似于小时候的音乐课,学了“我爱北京天安门,天安门上太阳升”之后,对北京天安门的无限遐想一样。 但是天安门离小学五年级的我

【JVM之内存与垃圾回收篇】JVM与Java体系结构

大兔子大兔子 提交于 2020-08-16 12:18:52
JVM与Java体系结构 前言 作为 Java 工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接 OOM(out of memory)! 想解决线上 JVM GC 问题,但却无从下手。 新项目上线,对各种 JVM 参数设置一脸茫然,直接默认吧然后就 GG 了 每次面试之前都要重新背一遍 JVM 的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优 VM 参数,如何解决 GC、OOM 等问题,一脸懵逼。 大部分 Java 开发人员,除会在项目中使用到与 Java 平台相关的各种高精尖技术,对于 Java 技术的核心 Java 虚拟机了解甚少。 一些有一定工作经验的开发人员,打心眼儿里觉得 SSM、微服务等上层技术才是重点,基础技术并不重要,这其实是一种本末倒置的“病态”。如果我们把核心类库的 API 比做数学公式的话,那么 Java 虚拟机的知识就好比公式的推导过程。 计算机系统体系对我们来说越来越远,在不了解底层实现方式的前提下,通过高级语言很容易编写程序代码。但事实上计算机并不认识高级语言 架构师每天都在思考什么? 应该如何让我的系统更快? 如何避免系统出现瓶颈? 知乎上有条帖子:应该如何看招聘信息,直通年薪 50万+? 参与现有系统的性能优化,重构,保证平台性能和稳定性 根据业务场景和需求,决定技术方向,做技术选型

SimpleDateFormat和ThreadLocal联合使用

ⅰ亾dé卋堺 提交于 2020-08-16 12:08:07
SimpleDateFormat线程不安全问题 SimpleDateFormat大家都用过,日期与字符串转换的类,它的方法是线程不安全的。有同学就说了,这个方法不安全也没事啊,不就是做个日期转换,现编写一下代码 package com.huawei.test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Locale; public class ProveNotSafe { public static void main(String[] args) { for (int i=0;i<5;i++){ new Thread(new DateFormatTest()).start(); } } } class DateFormatTest implements Runnable{ static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US); @Override public void run() { try { System.out.println(Thread.currentThread().getName()+":"+df.parse("2020-09-11")); }

2020年的秋招已经开始了!最新Java面试题大全(文末附参考答案)送给大家

我与影子孤独终老i 提交于 2020-08-16 11:27:09
包含的模块 本文分为十九个模块,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 一. Java 基础模块 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。 2.== 和 equals 的区别是什么? == 解读: 对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同; 代码示例

深入理解Java虚拟机笔记---属性表集合

走远了吗. 提交于 2020-08-16 10:54:21
深入理解Java虚拟机笔记---属性表集合 在Class文件,字段表,方法表中都可以携带自己的属性表集合,以用于描述某些场景专有的信息。与Class文件中其它的数据项目要求的顺序、长度和内容不同,属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格的顺序,并且只要不与已有的属性名重复,任何人实现的编译器都可以向属性表中写入自己定义的属性信息,Java虚拟机运行时会忽略掉它不认识的属性。为了能正确地解析Class文件,《Java虚拟机规范(第二版)》中预定义了9荐虚拟机实现应当能识别的属性,具体如下表所示: 对于每个属性,它的名称需要从常量池中引用一个CONSTANT_Utf8_info类型的常量表来表示,而属性值的结构则是完全自定义的,只要说明属性值所占用的位数长度即可。一个符合规则的属性表应该满足如下表定义的结构: 1.Code属性 Java程序方法体里的代码经过Javac编译器处理之后,最终变为字节码指令存储在Code属性内。Code属性出现在方法表的属性集合中,但并非所有方法都必须存在这个属性表,譬如接口或抽象类中的抽象方法就不存在Code属性,如果方法有Code属性表存在,那么它的结构如下表: attribute_name_index是一项指向CONSTANT_Utf8_info常量表的索引,常量值固定为“Code”,它代表了该属性的属性名称,attribute

深入理解Java虚拟机笔记---属性表集合

痞子三分冷 提交于 2020-08-16 10:50:37
深入理解Java虚拟机笔记---属性表集合 在Class文件,字段表,方法表中都可以携带自己的属性表集合,以用于描述某些场景专有的信息。与Class文件中其它的数据项目要求的顺序、长度和内容不同,属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格的顺序,并且只要不与已有的属性名重复,任何人实现的编译器都可以向属性表中写入自己定义的属性信息,Java虚拟机运行时会忽略掉它不认识的属性。为了能正确地解析Class文件,《Java虚拟机规范(第二版)》中预定义了9荐虚拟机实现应当能识别的属性,具体如下表所示: 对于每个属性,它的名称需要从常量池中引用一个CONSTANT_Utf8_info类型的常量表来表示,而属性值的结构则是完全自定义的,只要说明属性值所占用的位数长度即可。一个符合规则的属性表应该满足如下表定义的结构: 1.Code属性 Java程序方法体里的代码经过Javac编译器处理之后,最终变为字节码指令存储在Code属性内。Code属性出现在方法表的属性集合中,但并非所有方法都必须存在这个属性表,譬如接口或抽象类中的抽象方法就不存在Code属性,如果方法有Code属性表存在,那么它的结构如下表: attribute_name_index是一项指向CONSTANT_Utf8_info常量表的索引,常量值固定为“Code”,它代表了该属性的属性名称,attribute

深入理解Java虚拟机笔记---属性表集合

会有一股神秘感。 提交于 2020-08-16 10:50:21
深入理解Java虚拟机笔记---属性表集合 在Class文件,字段表,方法表中都可以携带自己的属性表集合,以用于描述某些场景专有的信息。与Class文件中其它的数据项目要求的顺序、长度和内容不同,属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格的顺序,并且只要不与已有的属性名重复,任何人实现的编译器都可以向属性表中写入自己定义的属性信息,Java虚拟机运行时会忽略掉它不认识的属性。为了能正确地解析Class文件,《Java虚拟机规范(第二版)》中预定义了9荐虚拟机实现应当能识别的属性,具体如下表所示: 对于每个属性,它的名称需要从常量池中引用一个CONSTANT_Utf8_info类型的常量表来表示,而属性值的结构则是完全自定义的,只要说明属性值所占用的位数长度即可。一个符合规则的属性表应该满足如下表定义的结构: 1.Code属性 Java程序方法体里的代码经过Javac编译器处理之后,最终变为字节码指令存储在Code属性内。Code属性出现在方法表的属性集合中,但并非所有方法都必须存在这个属性表,譬如接口或抽象类中的抽象方法就不存在Code属性,如果方法有Code属性表存在,那么它的结构如下表: attribute_name_index是一项指向CONSTANT_Utf8_info常量表的索引,常量值固定为“Code”,它代表了该属性的属性名称,attribute

JVM运行时数据区--堆

空扰寡人 提交于 2020-08-16 10:49:42
一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈。 核心概述 1.一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域 2.Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间(堆内存的大小是可以调节的) 3.《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。 4.所有的线程共享java堆,在这里还可以划分线程私有的缓冲区(TLAB:Thread Local Allocation Buffer).(面试问题:堆空间一定是所有线程共享的么?不是,TLAB线程在堆中独有的) 5.《Java虚拟机规范》中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。从实际使用的角度看,“几乎”所有的对象的实例都在这里分配内存 (‘几乎’是因为可能存储在栈上,另见逃逸分析) 6。数组或对象永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对象或者数组在堆中的位置。 7.在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除 8.堆,是GC(Garbage Collection,垃圾收集器)执行垃圾回收的重点区域 配置堆内存及查看jvm进程 编写HeapDemo/HeapDemo1代码: