- 博客(71)
- 资源 (35)
- 收藏
- 关注
原创 k8s-项目部署案例
修改了ConfigMap,但是Pod依旧依然使用的是之前的ConfigMap,简单粗暴的解决方法,java-demo做个滚动升级。现在已经将数据库的配置修改到ConfigMap了,将ConfigMap中mysql的数据库连接地址改下。在编写的Deploymentyaml中使用ConfigMap,跟Containers同一层级。mysql启动好后,将SQL拷贝到mysql的容器中。将原来数据库的数据导入k8s中的mysql数据库。检查配置文件是否为修改后的ConfigMap内容。在k8s平台部署项目流程。
2024-02-08 18:11:05 1421
原创 kubernetes-Ingress最佳方式对外暴露应用
看到k8s-node2节点监听着80端口,这个跟service不一样,service是所有的后端pod都会监听80/443端口,这个是只有部署ingree-nginx的那台机器会监听80/443端口。hostNetwork: true - 当前的网络使用主机节点网络对外提供服务,如果在不做任何的配置下,刚才创建的。--key=blog.ctnrs.com-key.pem - 自签证书Key。--cert=blgo.ctnrs.com.pem - 自签证书。Ingress-Nginx高可用方案。
2024-02-08 09:46:40 419
原创 k8s-深入理解Service(为Pod提供负载均衡和发现)
可以看到你请求的ServiceName,本质请求的是CoreDNS,CoreDNS保存有从K8s获得的A记录,然后返回真实服务IP。在实际生产中,k8s的集群不会直接暴露在公网中,一般会在k8s集群前加一个负载均衡器,这个负载均衡器暴漏在公网。k8s默认使用iptables模式,如果要使用IPVS模式,需要单独启用IPVS模式,见下一小节。Iptables有性能衰减,k8s已将IPVS加入,IPVS性能非常稳定,建议使用IPVS。正常解析到了,在程序代理里,可以使用ServiceName替换以前写的IP。
2024-02-05 06:57:26 1204
原创 k8s-常用工作负载控制器(更高级管理Pod)
strategy.rollingUpdate.maxSurge: 25% - 我们之前不是正常副本数设置了3个,升级的时候,你可以发现启动了1个新的,这时变为4个pod了(既3+3*0.25=3.75,不够1个算1个=4),这个参数就是用来配置,滚动更新时,Pod的最大副本数量。strategy.rollingUpdate.maxUnavailable: 25% - 滚动更新过程中,最大不可用Pod副本数量,比如总共10个副本,一下5个副本不可用,直接导致提供并发服务不够用了。
2024-02-04 17:59:17 1204
原创 kubernetes-深入理解Pod对象:调度
3、Controller-Manager 通过 APIServer 提供的 watch 实时监听 Pod 事件,发现有新的 Pod 要创建,Pod 控制器开始接管并创建 Pod(此时Pod状态属于pending中,即pod创建中或pod创建完成,但未被调度),创建完成后将结果上报给 APIServer。如果同一节点上,有10个容器,在部署的时候,不做资源限制,当其中的一个或几个容器突然CPU或内存飙升,可能会占满服务器的资源,导致其他的容器不能再正常提供服务,所以有必要对Pod(容器)做出资源限制。
2024-02-03 22:36:59 810
原创 kubernetes-深入理解Pod对象:基本管理
先在容器web的/data目录下创建了一个index.html然后退出,再进入容器test的/data目录下,发现/data目录下的文件是一致的,证明他们是共享存储。同一Pod下,两个容器查看到相同的网络以及监听端口,容器"web"之所以没有对应的命令,是因为它是个nginx容器,如果有的话,如刚才所有应该保持一致。进入容器“test”通过wget命令去访问容器“web”的nginx页面,如果访问到了Nginx页面,说名两个容器直接网络是互通的。将pod.yaml改名pod-net-test.yaml。
2024-02-01 00:06:49 344
原创 kubernetes-资源编排(YAML)
把-o yaml 的yaml换成 json, 就可以导出JSON格式的文件,一般json主要用于传输对接yaml信息用的,正常主要用yaml执行kube操作。create可以创建各种资源以及支持各种创建格式(json、yaml以及命令行),而apply主要是通过yaml创建资源以及更新。注意:这种先通过create再导出yaml的方式,还要看kubectl是否支持你当前需要创建的资源,不支持也是不行的。name:web #资源的名字,在同一个namespace中必须唯一。
2024-01-30 11:30:07 882
原创 kubernetes-kubectl命令行管理工具
localhost:8080 - 这是一个kube-apiserver的非安全端口,还有一个对外端口是6443,kubectl默认先连接8080(二进制默认开始8080,kubeadmin默认关闭8080),如果配置有kubeconfig(.kube/config)就直接走这个配置连接安全端口(所谓安全端口,就是有权限验证的端口)。这个命令能查看的资源,可以通过kubectl api-resources命令列出来的资源,都可以通过get查看。一、kubectl与kubeconfig的关系。
2024-01-29 21:31:57 425
原创 kubernetes-快速部署一套k8s集群
下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定的一样。--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致。--service-cidr 集群内部虚拟网络,Pod统一访问入口。初始化完成后,最后会输出一个join命令,先记住,下面用。
2024-01-29 14:57:05 1084
原创 JVM-字节码应用
classReader.accept方法的第一个参数是classVisitor,即上面定义的classVisitor, 第二个ClassReader.SKIP_DEBUG,操作的时候,哪些信息不看,这里是跳过debug信息,一般来说设置忽略debug信息就可以了。用CoreAPI解析和TreeAPI都能做字节码解析,区别,TreeAPI必须读取完整字节码信息,才能做解析。八、反射之二反射管理类信息案例实战。九、反射之三反射修改类信息案例实战。十、反射之四通过反射调用类方法实战。
2024-01-26 17:13:49 1058
原创 JVM-透彻理解字节码以及指令
每个线程在执行的时候,先看能不能抢到锁,不能抢到锁等到,抢到锁,执行monitorenter指令,代码执行完后,再执行monitorexit指令退出,其他线程继续抢锁,抢到后继续执行这2个指令,如此往复。调用动态方法(如lamdba、动态语音编译的字节码),会有至少两步,第一步,先将语法糖还原成invokedynamic指令,第二步再根据具体方法类型,调用具体指令。0000 0031 - Java版本号,这里的31是16进制大版本号,转换后十进制49,前面4个字节 是小版本,后面是大版本。
2024-01-18 18:49:58 1139 1
原创 JVM-JVM支持高并发底层原理精讲
当线程即使处于阻塞的时候,线程不再收到信号,线程也是可以收到一个异常,可以这个异常理解为一个信号,就像闹钟一样就会响,强制这个线程做出一定的响应,而这个异常就是这个子线程的那种,当调用线程终止方法,就会触发这个异常。当t1线程的x=b,从a=1代码的下面,移动到a=1代码的上面,且t2线程的y=a,从b=1代码的下面移动到b=1代码的上面,就会计算出x==0&&y==0,这种问题就是。这里为什么没有停止呢,这是因为当阻塞的时候,父线程只能给子线程发停止的信号,要不要停止子线程说了算。
2024-01-12 17:00:55 1054
原创 JVM-Arthas高效的监控工具
一、arthas介绍3.选择监控哪个进程4.进入具体进程二、arthas的基础命令与基本操作1.查询包含Java的系统属性:命令:sysprop |grep java1.查询不含Java的系统属性:命令:sysprop | grep -v java3.打印历史命令命令:history4.查看当前工作目录命令:pwd三、如何使用arthas监控线上服务的内存状态1.dashboard - 当前系统的实时数据面板命令:dashboard -i 100 100毫秒刷新一次。
2024-01-11 10:39:43 1876 1
原创 JVM-JVM基本工具与必会调试方式
命令:jmap -dump:live,format=b,file=test.hprof 45094。FGCT 从应用程序启动到采样时的 Full GC 的消耗时间(秒)YGC 从应用程序启动到采样时 Young GC 的次数。FGC 从应用程序启动到采样时 Full GC 的次数。如果启动的是jar,则会将jar的完整类名信息展示出来。GCT 从应用程序启动到采样时 GC 的总时间。如果启动的时候带有参数,还会将启动时的参数打印出来。四、堆分析的基本功-jmap和jhat工具。
2024-01-08 16:47:54 379
原创 JVM-透彻掌握ParNew垃圾回收器的原理与使用screenflow
【代码】JVM-透彻掌握ParNew垃圾回收器的原理与使用screenflow。
2024-01-08 11:29:59 360
原创 JVM-透彻掌握Parallel垃圾回收器的使用方法
在这种模式下,年轻代的⼤ ⼩、Eden和Survivor的⽐例、晋升⽼年代的对象年龄等参数会被⾃动调整,已达到在堆⼤⼩、吞吐量和停顿时间之 间的平衡点。在⼿动调优⽐较困难的场合,可以直接使⽤这种⾃适应的⽅式,仅指定虚拟机的最⼤堆、⽬标的吞吐量 (GCTimeRatio)和停顿时间(MaxGCPauseMills),让虚拟机⾃⼰完成调优⼯作。不管执⾏多少次,也不管每次执⾏多少时间,但是要在⼀定的时间范围⾥ ,尽可能让线程执⾏⽤户程序 ⾼吞吐量则可以⾼效率地利⽤CPU时间,尽快完成程序的运算任务。
2024-01-08 11:29:34 819
原创 亿级流量系统如何优化老年代ParNew_CMS?
情况1:比如,老年代此时可用空间80M < 历次YGC后升级老年代的平均对象大小100M,这样就会触发FullGC;情况2:移入老年代的对象大于,此时老年代的剩余空间,触发FullGC;情况3:被占用的老年代空间超过阈值,触发FullGC。
2024-01-05 09:27:30 307
原创 G1为什么更适合亿级流量系统以及YGC优化策略screenflow
之前讲过,在G1里新生代的占比是5%-60%,如果堆空间是8G,此时新生代占的空间就是400MB~4.7GB,如果一次回收完,就会非常耗时,可以通过设置回收最大停顿时间,减少服务的停顿,一次回收一部分,比如1.2G。1.ParNew执行回收的时候,STW会比较长,CMS存在碎片化的问题,当物理机的内存变大,这套组合存在的问题会更大,加大物理内存,反而让垃圾回收更慢。如果是视频、大数据、批处理等对象比较大的场景,我们可以将最大停顿时间调大一些,让垃圾回收频率降低,单次垃圾回收效果会更好。
2024-01-05 09:26:44 371
原创 JVM-【场景实战】熟悉Serial垃圾回收器的使用
这个收集器是⼀个单线程的收集器,但它的 “单线程” 的意义并不仅仅说明它只会使⽤⼀个 CPU 或⼀条收集线 程去完成垃圾收集⼯作,更重要的是在它进⾏垃圾收集时,必须暂停其他所有的⼯作线程,直到它收集结束 (Stop The World)Serial回收器的优势与设置参数优势:简单⽽⾼效(与其他收集器的单线程⽐),对于限定单个 CPU 的环境来说, Serial 收集器由于没有线程交互的开销,专⼼做垃圾收集⾃然可以获得最⾼的单线程收集效率。② 作为⽼年代 CMS 收集器的后备垃圾收集⽅案,
2024-01-04 09:30:21 391
原创 JVM-透彻理解GC日志的内容
⽼年代的总⼤⼩是10240K,未使⽤。这是因为 在新⽣代⾥的from和to是轮流使⽤的,⼀次只有⼀个发挥作⽤,相当于浪费了⼀个1M的空间,因此只有空间只有 8M的Eden区+1个1M的S区,⼀共是9M。] 这⾥表示的含义是在执⾏垃圾回收之前,年轻代被占⽤的空间 是8105K,完成垃圾回收之后占⽤的空间是378K,完成之后新⽣代的总空间⼤⼩是9216K,耗时0.0015472 secs。表示垃圾回收之前堆空间被占⽤的空间是8105K,回收之后被占⽤的是 378K,堆的总空间为19456K。
2024-01-04 09:29:37 1279
原创 JVM-七步带你掌握JVM内存结构
这是JDK1.6的内存结构,JDK1.8以后方法区已经挪出来了,不属于JVM内存。一、从房屋户型图理解JVM的内存划分原理与基本结构介绍。二、第一步:掌握程序计数器的功能与工作过程。
2024-01-02 17:24:28 1335
转载 用了6年的 SpringBoot 项目部署方案,稳得一批!
都是由mvn中profiles的properties中提供,是可变的参数,脚本代码本身不需要人工去修改,只需要变的是mvn的参数即可;该节点中的节点是可作为参数传递给其他配置文件,如我这里的package-name节点值就可以在另外的assembly.xml或者shell脚本文件中通过${package-name}其实shell脚本中包含有解压命令,但是我在打包时放在了zip中,所以只能通过手动解压了,当然可以调整;把配置文件和jar包等压缩成什么文件格式,这里可以有:zip,tar等。
2023-12-29 17:18:59 16
原创 亿级流量场景下如何优化混合回收
当大对象超过region一半,就会将其放到大对象region里边去,占用老年代空间,当有大量短周期大对象进入老年代,也会提高混合回收的频率,进而影响到FullGC的频率。我们完全可以通过最大停顿时间的调整,来控制每次垃圾回收的region数量以及回收垃圾大小。关于G1的优化,最重要的两点1.调整最大停顿时间、2.调整region大小。2.优化G1垃圾回收关键的一点,设置合理的最大停顿时间。1.是已分配内存占总内存的超过45%阈值;
2023-12-28 09:57:43 326
原创 JVM基础原理篇-带你深入拆解G1垃圾回收原理
动态调整新生代区域region的数量 - 在G1里,在执行YGC的时候,新生代的数量是可以动态变化的,一般什么都不设置的情况下,Eden区占比例在5%~60%之间(调整的原因,是根据每次执行垃圾回收后,根据当前的情况判断增加region数量,每增加一个region数量,Eden区就会增加一个,如果没有必要,Eden数量太多,导致回收时间太长,这时JVM就会减少Eden区数量)。1.混合回收前面为什么会有一次YGC呢,前面讲了混合回收的触发条件是,在YGC后,已分配的内存占总内存的45%,触发混合回收;
2023-12-27 22:16:13 856
原创 总结两套JVM模版配置
XX:+CMSScavengeBeforeRemark - 在重新标记阶段,会STW,导致服务中断,这个时候,在执行重新标记前,先执行一次YGC,因为重新标记主要管的是新创建的对象(新生代),先执行一次YGC,新生代中的垃圾对象都会被提前清除掉,这样再扫描对象,对象就会少很多,从而降低STW停顿时间。-XX:PermSize=256M - 设置永久代初始内存大小,永久代大小的设置,跟你是什么应用(比如秒杀系统)没有多大关系,因为永久代是装载类文件的,一般设置256/512M就可以;
2023-12-21 11:55:25 945
原创 JVM征服面试篇-亿及流量系统设计(学习笔记)
一、如何拆解亿级流量系统-百万级结算系统如何设置JVM。4.第四步:确定单笔订单耗时,寻找性能瓶颈。2.第一步:确定业务背景和核心流程。5.第五步:确定单笔支付需要的空间。3.第二步:确认系统的压力在哪里。6.第六步:回答面试官的问题。3.第三步:确定QPS。
2023-12-20 18:00:31 330
原创 JVM基础原理篇-透彻理解类加载子系统(学习笔记)
收到一个新的类,最底层的系统类加载器并不直接加载,而是向上委托给扩展类加载器,而扩展类加载器拿到新类后,也不执行加载,继续向上委托给引导类加载器,引导类加载器会执行加载,假如能够加载成功,结束退出,如不能加载,向下返回个null,扩展类加载器检测到上层加载器不能加载,它会执行加载,假如加载成功,结束退出,如不能加载,继续向下返回个null,系统类加载器检测到上层加载器不能加载,系统类加载器会执行加载。扩展类加载器加载的类文件,相对JVM而言,不是特别重要,但是又比我们写的代码重要。
2023-12-20 17:54:24 429
原创 垃圾收集器及内存分配
‐XX:+PrintGC 输出GC日志 ‐XX:+PrintGCDetails 输出GC的详细日志 ‐XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) ‐XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013‐05‐04T21:53:59.234+0800) ‐XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 ‐Xloggc:F://test//gc.log 日志文件的输出路径。(这里是指,并行能力较强的机器)
2023-12-15 14:18:36 956
转载 SpringBoot+内置Tomcat配置,参数调优,最大并发量,最大连接数
SpringBoot开发最大的好处是简化配置,内置了Tomcat, 在SpringBoot2.0.x版本中内置Tomcat版本是8.5.x,SpringBoot内置Tomcat的默认设置中,Tomcat的等待队列长度默认是100,Tomcat的最小工作线程数默认分配10,Tomcat的最大线程数是200,最大连接数是10000,至于最大并发量和最大连接数,常常理解成最大并发量就是最大连接数,实际上是有些牵强的,最大连接数并不一定就是最大并发量。,这2条请求任务恰恰是最容易忽略的,如此最终处理了14条请求,
2023-12-15 10:00:00 1003
原创 JVM垃圾回收算法
上面这张图代表的是程序运行期间所有对象的状态,它们的标志位全部是0(也就是未标记,以下默认0就是未标记,1为已标记),假设这会儿有效内存空间耗尽了,JVM将会停止应用程序的运行并开启GC线程,然后开始进行标记工作,按照根搜索算法,标记完以后,所有从root对象可达的对象就被标记为了存活的对象,此时已经完成了第一阶段标记。和标记清除算法一样,也是从根节点开始,对对象的引用进行标记,在清理阶段,并不是简单的清理未标记的对象,而是将存活的对象压缩到内存的一端,然后清理边界以外的垃圾,从而解决了碎片化的问题。
2023-12-14 16:12:17 1068
原创 jvm调优参数常用命令总结
(2)查询内存中对象数量及大小(包括活跃以及非活跃对象)(4)查看进程的GC信息 间隔1秒1次,打印5次。(4) 将内存使用情况dump到文件中。(3)查询内存中对象数量及大小(活跃对象)5.设置jvm的堆内存初始大小和最大大小。通过jstat命令进行查看堆内存使用情况。12.当发生内存溢出时,自动dump文件。查看Java进程xxx的指定JVM参数。查看Java进程xxx的JVM参数。(2) 通过浏览器访问。(1)查看class加载数统计。1.查看Java命令参数。(2)其他见学习笔记。
2023-12-14 14:46:44 358
原创 Docker常用命令总结
docker pull centos 等价于 docker pull docker.io/library/centos。将容器ID为7f6c10d7a83c mycentos:1.0的容器创建镜像mycentos:1.0。docker push centos6.5 不带仓库地址一般默认hub.docker.com。容器启动并link容器(tomcat02连接到tomcat01)docker logs -f -t --tail 行数 容器名。启动容器并添加数据卷(默认读写)启动容器并添加数据卷(只读)
2023-12-14 14:24:04 444
原创 大白话MySQL优化(学习笔记):调优思维(6)
where条件是idc>3(范围检索),数据取出后,name的顺序肯定是不是排好序的,需要重新排序,所以走的是Using temporary,类似之前学order by的时候,取出name后,需要重排序一样。B-tree索引,由于data特别大的时候,会导致子存储的键值会减少,B-tree的高度会越来越高,查找的深度会加大,读取的IO次数会越来越多。同样的道理,where条件改为idc=3,这个时候,取出数据name,是拍好序的,就不需要重新排序了,所以走的是索引。
2023-12-07 10:11:38 840
原创 大白话MySQL优化(学习笔记):慢查询优化概述(5)
在没索引的情况下,mysql会通过使用Using join buffer(hash join)来,优化查询,减少循环次数,原来可能循环1000次,优化后可能减少到10次,这个取决于mysql的join_buffer_size大小的设置,默认256kb。如果sort_buffer可以存放所有满足条件的(id,col2)对(注意:这里是根据排序字段col2进行排序的,意味着id是乱序的,后面排好序后,id是可能乱序的,可以优化将id排好序,id排序的内存大小受””,默认大小也为256kb),则进行排序;
2023-12-05 18:11:07 933
CentOS7 nginx离线安装gcc/pcre-devel/openssl-devel/zlib-devel以及其他包
2022-08-12
mybatis-generator-core-1.3.2.jar包及自动生成样例以及使用方法
2015-10-23
SSH_struts1.3_hibnerate3.2_spring2.5框架整合开发
2012-10-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人