guitar-coder

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 留言板

  • 搜索

深入Tomcat/Jetty(七)-性能优化

发表于 2019-08-24 | 更新于 2020-01-19 | 分类于 学习笔记
本文字数: 15k | 阅读时长 ≈ 13 分钟
深入学习Tomcat/Jetty的笔记

CMS 和 G1

CMS将整个堆分成了新生代、老年代两大部分,新生代分为Eden和Survivor,新的对象通常情况下都在Eden区域创建,收集一次以后如果对象还在则会转移到Survivor区域,收集多次达到一定次数对象还在的话就会转移到老年代。分代收集是为了更好地管理和回收对象,因为每个代对对象管理的方法不一样。

G1使用非连续空间,所以它能够管理更大的堆,同时能够并发完成大部分GC的工作,这期间不会发生STW;G1管理的每个区域都称之为region,它的固定大小通常为2m。

阅读全文 »

深入Tomcat/Jetty(六)-通用组件

发表于 2019-07-25 | 更新于 2020-01-19 | 分类于 学习笔记
本文字数: 9.6k | 阅读时长 ≈ 9 分钟
深入学习Tomcat/Jetty的笔记

日志框架

slf4j:日志接口和门面,记录日志;

JCL:commons logging,和slf4j类似的门面日志;

log4j:第三方日志输出的具体实现;

JUL:Java原生的日志输出;

logback:第三方日志输出,性能由于log4j,也是Spring Boot默认日志框架;

log4j2:第三方日志输出的具体实现,号称目前Java平台性能最好。

阅读全文 »

深入Tomcat/Jetty(五)-抽象容器

发表于 2019-07-19 | 更新于 2020-01-19 | 分类于 学习笔记
本文字数: 12k | 阅读时长 ≈ 11 分钟
深入学习Tomca和Jetty

Tomcat-Host容器

热加载:后台线程定期检测类的变化,如果有变化,就重新加载类,不会清空session;

热部署:后台线程定时检测应用的变化,如果有变化,就会清空session;

线程池:ScheduledThreadPoolExecutor,周期性执行

方法:

1
2
3
4
5
exec.scheduleWithFixedDelay(
new ContainerBackgroundProcessor(),// 要执行的 Runnable
backgroundProcessorDelay, // 第一次执行延迟多久
backgroundProcessorDelay, // 之后每次执行间隔多久
TimeUnit.SECONDS); // 时间单位`

ContainerBackgroundProcessor,ContainerBase内部类,实现Runnable接口;

执行当前容器里的backgroundProcess(),并且递归调用子容器的backgroundProcess(),如果子容器的backgroundProcessorDelay大于0,表明子容器有自己的线程,所以此时就不用父类来调用;

这个方法是接口中的默认方法,所以顶层engine启动后台线程以后,它会启动顶层engine以及子engine的周期性任务。

由于ContainerBase是所有组件基类,所以其他组件都可以由自己的周期性任务。

阅读全文 »

深入Tomcat/Jetty(四)-零拷贝与高性能

发表于 2019-07-18 | 更新于 2020-01-19 | 分类于 学习笔记
本文字数: 1.9k | 阅读时长 ≈ 2 分钟
深入学习Tomcat和Jetty的笔记

Linux-进程和线程

执行程序:程序文件加载到内存,然后CPU读取和执行;
进程:一次程序的执行过程;
关键字:每一个进程都有自己的task_struct;
内核:也是一个程序,启动时加载到内存;
内存分配:假如进程分配有4G虚拟内存,但是只有当访问到的虚拟内存没有分配物理内存时,才会产生缺页中断,此时内存管理单元(MMU)才会将虚拟内存和物理内存的映射关系保存在表中,再次访问虚拟内存就能读找到物理内存页。

阅读全文 »

深入Tomcat/Jetty(三)-连接器

发表于 2019-07-18 | 更新于 2020-01-19 | 分类于 学习笔记
本文字数: 9.7k | 阅读时长 ≈ 9 分钟
Tomcat和Jetty的深入学习笔记

Tomcat-NioEndpoint

Java I/O模型:一个进程的地址空间分为用户空间和内核空间,用户线程不能直接访问内核空间。

同步阻塞I/O:用户线程发起read调用,然后阻塞让出CPU,接着内核等待网卡数据到来,把数据从网卡拷贝到内核空间,最后把数据拷贝到用户空间,把用户线程唤醒;

同步非阻塞I/O:用户线程不断发起read调用,如果没有数据,内核就返回失败,直到数据到了内核空间。在等待数据从内核空间拷贝到用户空间这个时间里,线程还是阻塞的,等数据到了用户空间再把线程叫醒。

I/O多路复用:首先:线程发起select调用,询问内核是否准备好,等准备好,用户线程再发起read调用;多路复用是指select可以向内核查多个数据通道(Channel)的状态。

异步I/O:用户线程发起read调用的同时注册一个回调函数,内核将数据准备好后,再调用指定的回调函数完成处理。在这个过程中,用户线程一直阻没有塞。

NioEndpoint实现了多路复用。

阅读全文 »

深入Tomcat/Jetty(二)-基本架构

发表于 2019-07-18 | 更新于 2020-01-19 | 分类于 学习笔记
本文字数: 3.6k | 阅读时长 ≈ 3 分钟
深入学习Jetty和Tomcat

Tomcat系统架构

  1. 连接器,将网络数据包装成Request以及将servlet返回的数据包装成Response;
  2. Servlet容器:加载、调用Servlet处理Request。

连接器:ProtocolHandler组件+Adapter组件;

ProtocolHandler组件:

  1. EndPoint,通信端点,包含Accept监听Socket连接请求,SocketProcess(实现runnable接口)处理Socket连接请求(Executor线程池);
  2. Processor,读取网络数据字节包装成Request和Response,定义了请求的处理,即:EndPoint生成一个SocketProcessor,提交到线程池,SocketProcessor的Run方法调用Processor组件解析应用层协议,Processor生成Request对象后,会调用Adapter的Service方法。

Adapter组件:

适配器模式,将传进来的Request转成ServletRequest,然后执行Service方法。

阅读全文 »

深入Tomcat/Jetty(一)-servlet容器简介

发表于 2019-07-18 | 更新于 2020-01-19 | 分类于 学习笔记
本文字数: 4.5k | 阅读时长 ≈ 4 分钟
深入学习Tomcat/Jetty等容器

学习路径

概念和基础

Tomcat或者Jetty:”HTTP服务器+Servlet容器”,又称为WEB容器,本文基于Tomcat 9。

操作系统:《UNIX环境高级编程》

Java基础:面向对象设计概念,集合,I/O体系,多线程并发,网络模型(NIO,BIO,AIO),注解和反射

WEB基础:Spring框架开发经验。

阅读全文 »

ELK-入门搭建和使用

发表于 2019-06-21 | 更新于 2020-01-19 | 分类于 编程技术
本文字数: 8.6k | 阅读时长 ≈ 8 分钟
ELK的入门搭建和使用

简述

ELK是现在流行的数据采集、监控、分析系统,其本质是由三个开源组件ElasticSearch+Logstash+Kibana组成,常用于系统监控,日志分析等场景。

ElasticSearch:基于Json的分布式分析和搜索引擎,水平扩展,高可靠性,管理便捷,后面简称ES。

LogStash:动态数据收集管道,拥有可扩展的插件系统,强大的与ES的协同功能。

Kibana:以图表的形式呈现数据,具有可扩展的用户界面管理和配置Elastic Stack。

由于logstash比较重量级,所以有时候也会直接通过Beats输入到ES,但是更多的是beats+logstash的结合使用,即ES和Logstash放在同一台机器,用logstash做文本格式化,用轻量级的beat在端点采集日志传输到logstash。

阅读全文 »

数据结构和算法-散列表和哈希算法

发表于 2019-06-18 | 更新于 2020-01-19 | 分类于 数据结构/算法
本文字数: 1.7k | 阅读时长 ≈ 2 分钟
散列表和哈希算法的原理和应用

简述

散列表:利用数组支持按下标访问数据的特性扩展出的一种数据结构;

哈希算法:将任意长度的二进制值串映射为固定长度的二进制值串的一种算法。

阅读全文 »

MySql-join实战

发表于 2019-06-06 | 更新于 2020-01-19 | 分类于 学习笔记
本文字数: 2.5k | 阅读时长 ≈ 2 分钟
mysql join语句在开发中的使用。

简述

Join语句在Mysql多表联查的使用中非常广泛,通常来说,开发人员的意识中都会觉得Join的查询效率比子查询要高,但是如果滥用时,Join的效率并不如人意。

阅读全文 »
123…7
刘会俊

刘会俊

热爱coding的指弹玩家

68 日志
5 分类
29 标签
GitHub 知乎 微信 qq E-Mail
友情链接
  • 芋道源码
  • 程序猿DD
  • 张砚池的博客
  • 牧码
  • suveng`s blog
0%
京ICP备19003464号 © 2018 – 2023 刘会俊 | 站点总字数: 520k | 站点阅读时长 ≈ 7:53
由 Hexo 强力驱动
|
主题 – NexT.Mist
| 载入天数...载入时分秒...
|