获得徽章 0
ARTHAS
arthas是阿里巴巴的一款开源的Java 诊断工具。
Arthas可以解决哪些问题?
类从哪个Jar包加载的?为什么会报各种类相关的Exception?
修改的代码为什么没有执行到?是否commit?分支是不是搞错了?
遇到的问题在线上无法debug?拿到需要加日志从新发布?
是否有一个全局视角来查看系统的运行状况?
有办法监控到JVM的实时运行状态?
怎么快速定位应用的热点生成火焰图?
等等。。。
Arthas 支持jdk6+,支持LInux,mac,windows,采用命令行模式进行管理。
如何使用?
下载arthas-boot.jar,然后采用Java -jar 的方式启动
运行:
Java -jar -arthas-boot.jar
dashboard命令:
主要分为三个区域
线程状态
堆,非堆,直接内存,GC等详情
虚拟机所在服务器的详情
续:
ID:Java级别的线程Id,注意这个ID不能跟stack中的native Id相对应。
Name:线程名
Group:线程组名
Priority:线程优先级
State:线程的状态
CPU%:线程的CPU使用率
Delta_time:上次采用之后线程运行增量CPU的时间
Time:线程运行CPU的总时间
InterRupted:线程当前的中断位状态
Daemon:是否是daemon线程
创建的四个线程:
死循环线程
死锁线程
等待控制台输入线程
被阻塞线程
thread -n 3 -i 1000:列出1000ms内最忙的三个线程栈
thread -b :找出当前阻塞其他线程的线程
thread -state : 查看当前状态的线程
查看诊断Vm的相关参数:
vmoption :查看,更新VM诊断的相关参数
vmoption PrintGCDetails:查看指定的option
vmoption PrintGCDetails true:更新指定的option
展开
评论
Apache Pulsar:脉冲星
云原生架构:
存储和计算分离
节点对等
独立拓展
灵活扩容
快速容错
BookKeeper:
低延迟、高吞吐、持久化
强一致
高可用
IO隔离
Pulsar目标:解决多套消息系统之间的统一和融合
当前企业级特性:大集群,多租户
多租户是Pulsar诞生的一个很强的需求。
Apache Pulsar 提供了统一的消费模型,支持 Stream(如 Kafka)和 Queue(如 RabbitMQ)两种消费模型, 支持 exclusive、failover 和 shared 三种消费模式。同时,Pulsar 提供和 Kafka 兼容的 API,以及 Kafka-On-Pulsar(KoP) 组件来兼容 Kafka 的应用程序,KoP 在 Pulsar Broker 中解析 Kafka 协议,用户不用改动客户端的任何 Kafka 代码就能直接使用 Pulsar。
展开
评论
www.docs4dev.com
(Java学习文档)
评论
Spring IOC总结:
1、什么是IOC?
控制反转,控制反转的是对象的创建以及对象的调用,由原来传统的'new',到现在通过Spring 容器来调用。
目的:降低程序之间的耦合度。
IOC是一种思想!!!思想!!!
2、IOC底层实现原理
XML文件解析、Bean Factory、反射(动态获取类的字节码文件及类中的相关信息)
XML文件
将Bean注册到XML文件中
IOC主要是通过对象工厂来实现的,对象工厂又由两个接口的实现来完成,Bean Factory和ApplicationContext这两个接口
共同点:都可以加载XML配置文件,并完成对象的创建
Bean Factory
是由Spring Framework编写过程中定义的,不建议开发人员使用
在加载XML配置文件的时候仅仅就是将配置文件进行解析,不会进行对象的创建,在获取或者使用的时候才会进行对象的创建
ApplicationContext
这个接口是ApplicationContext的子接口,(子接口 功能比父接口功能更强大),这个接口开发人员一般会用
在加载XML配置文件的时候同时会创建对应的对象
ApplicationContext接口(其中两个主要)实现类
FileSystemXmlApplicationContext
传入的参数为XML文件的绝对路径(系统盘下的路径)
ClassPathXmlApplicationContext
传入的参数为当前项目src目录下的路径
展开
评论
Redis :
redis是开源的,内存中的数据结构存储系统,它可以用作数据库、缓存、和消息中间件。
redis启动命令:
cd bin
ls 查看是否有redis-server,redis-cli
启动redis服务器:
./redis-server config/redis.conf
启动redis客户端:
./redis-cli -p 6379(端口号)
默认有16个数据库。
keys *:查看所有的key
flushdb:清楚当前数据库数据
flushALL:清空所有数据库
exists key:判断当前key是否存在
move key 当前数据库:移除数据当前key
expire key 过期时间(秒):设置过期时间;ttl key:查看当前key剩余时间,不设置过期时间,默认为-1
type key:查看当前key的类型
incr key:自增1 ;步长:incrBy key 数字
decr key:自减1;步长:decrBy key 数字
字符串截取:GETRANGE key 开始下标 结束下标; GETRANGE key 0 -1:截取全部字符串
字符串替换: SETRANGE key 开始下标 替换值
setex key 过期时间:设置过期时间
setnx key value :如果不存在,创建key,如果存在,创建失败
mset:设置多个key-value
msetnx k1 v1 k2 v2:k1存在,k2不存在,此时会创建失败msetnx是一个原子性操作
mset user:1:name lzj user:1:age 21:设置user:1:对象
getset key value:如果不存在值,返回nil,如果存在值,获取原来的值,再替换
6379端口号来历:MERZ 美女明星,对应9键,就是6379,粉丝效应
Redis:是单线程的,是很快的,是基于内存操作的,Redis的性能根据网络带宽和机器内存,既然可以使用单线程,就使用单线程来操作了。
Redis是C语言写的,官方提供数据为100000+QPS,比memecache快,使用单线程完全碾压。
高性能的服务器不一定是多线程的;多线程上下文切换,不一定比单线程高。
CPU>内存>硬盘
核心:redis是将所有的数据放在内存中的,所以使用单线程效率最高的。<多线程上下文切换比较耗时>
展开
评论
Spring AOP
传统意义上是定义一个接口,再由一个类来实现这个接口,如果后期你想增加功能的话,只能停掉服务器重新加。
为了解决这种弊端,Spring FrameWork 推出了AOP代理机制。
静态代理:
定义一个接口,再定义一个类实现这个接口,再定义一个动态代理类,将这个普通类引入动态代理类中,并在动态代理类中实现普通类中的业务方法,将需要增加的业务方法直接加在实现普通来业务方法的合适位置,最后直接调用动态代理类就可完成业务操作。
展开
评论
下一页