性能测试为保证软件质量起到重要作用,对于交易量较大的应用系统,性能测试更是一个必不可少的环节。
当然网站访问较慢的原因有很多: CDN、代码问题、服务器运行内存、内存空间、访问量过高等等
线上问题排查相比于coding,是一个低频的工作,很多人不会经常遇到。一旦需要进行问题排查的时候,往往是重要且紧急的,因此问题排查的效率,就显得尤为重要。有些线上问题,比较直观,比如磁盘使用率高、网络流量高这种,借助合适的工具很快能定位到原因;但对于一些复杂的问题,如系统Load高、RSS占用高、内存溢出等,需要结合多方面的数据才能定位到原因。这时候,需要有正确的解题思路,并辅以合适的工具,才能高效地解决问题。
1.参数的含义 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了 -Xms128m JVM初始分配的堆内存 -Xmx512m JVM最大允许分配的堆内存,按需分配 -XX:PermSize=64M JVM初始分配的非堆内存 -XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
客户端无法连接服务端,查看服务器的端口开启状况,服务端口并没有开启。于是启动服务端,启动几秒后,服务端崩溃,重复启动,服务端依旧在启动几秒后崩溃。
NetData 是一个用于系统和应用的分布式实时性能和健康监控工具。它提供了对系统中实时发生的所有事情的全面检测。你可以在高度互动的 Web 仪表板中查看结果。使用 Netdata,你可以清楚地了解现在发生的事情,以及之前系统和应用中发生的事情。你无需成为专家即可在 Linux 系统中部署此工具。NetData 开箱即用,零配置、零依赖。只需安装它然后坐等,之后 NetData 将负责其余部分。
总的来说就是依照这些原则来解决这些问题以达到 GC 低频 GC 停顿时间短,以及低内存占用和高吞吐。
说在前面的话 朋友,你经历过部署好的服务突然内存溢出吗? 你经历过没有看过Java虚拟机,来解决内存溢出的痛苦吗? 你经历过一个BUG,百思不得其解,头发一根一根脱落的烦恼吗? 我知道,你有过! 但是我还是要来说说我的故事.................. ---- 背景: 有一个项目做一个系统,分客户端和服务端,客户端用c++写的,用来收集信息然后传给服务端(客户端的数量还是比较多的,正常的有几千个), 服务端用Java写的(带管理页面),属于RPC模式,中间的通信框架使用的是thrift。 thrif
如何在高性能服务器上进行JVM调优? 为了充分利用高性能服务器的硬件资源,有两种JVM调优方案,它们都有各自的优缺点,需要根据具体的情况进行选择。 1. 采用64位操作系统,并为JVM分配大内存 我们知道,如果JVM中堆内存太小,那么就会频繁地发生垃圾回收,而垃圾回收都会伴随不同程度的程序停顿,因此,如果扩大堆内存的话可以减少垃圾回收的频率,从而避免程序的停顿。 因此,人们自然而然想到扩大内存容量。而32位操作系统理论上最大只支持4G内存,64位操作系统最大能支持128G内存,因此我们可以使用64位操作系
性能测试过程中,对服务器资源的监控是必不可少的。这里的资源又分了两块,windows和linux
Tomcat 是常用的web开发服务器之一,在并发时有一定的局限性,一般的大型的网站采用NGINX与tomcat结合使用从而减少单个机器压力的问题。
Java中,引用和对象是有关联的。如果要操作对象则必须引用进行。因此,简单的办法是通过引用计数来判断一个对象是否可以回收。简单的说,给对象中添加一个引用计数,每当有一个引用失效时,计数器值减1,任何时刻计数器值为0的对象就是不可能再被利用的,那么这个对象就是可回收对象。那么为什么主流的Java虚拟机里面都没有选择这种算法呢?主要的原因是它很难解决对象之间相互循环引用的问题。
使用知行之桥EDI系统时,由于业务数据量的增多,难免会遇到一些系统异常情况,为了保证企业生产环境的稳定运行,EDI系统自带了错误邮件通知功能。此功能保证了在EDI系统自动处理数据的过程中可以将异常信息及时告知用户,使用户收到邮件及时处理,保证数据的正常传输。
最近支付宝小程序允许个人开发者上架应用了。我也很快的改写了我的《疫苗批号查询》程序,顺利过审上架。并且明显能看到阿里虽然在各个方面都是在抄袭微信小程序,但无论是IDE还是管理后台都更上了一个层级。这不昨天我的小程序上架满一周评级出来了,B级看了下健康问题主要是首屏开启过慢部分用户会超过3000ms。
最近在做一个项目,顺便把前段时间学习的ElasticSearch给用上,所以我在服务器上面安装了ES
因为logging默认使用utf-8,而我们的windows的日志输出控制台使用系统的GB2312,所以去conf中修改logging的配置编码为GB2312即可
jmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。可以使用jmap生成Heap Dump。在Java命令学习系列(零)——常见命令及Java Dump介绍和Java命令学习系列(二)——Jstack中分别有关于Java Dump以及线程 Dump的介绍。 这篇文章主要介绍Java的堆Dump以及jamp命令
| 题记 | 网上当前(截止20170914)流传的各种配置文件普通存在以下问题: 1)版本低,不能和当前版本5.X匹配。 2)5.X的配置本身较1.X,2.X就有很大不同,原有配置已不适用。 3)ES英文、中文文档也没有及时更新。 现在,确保ES5.X的高性能到底需要哪些配置越发令人神往。 以下清单内容参考了ES官网文档,且都是在ES5.4.0的环境中验证过的,请放心使用。 清单1:了解ES集群拓扑结构 您需要确定您的部署拓扑,以便做出正确的Elasticsearch配置决策。 当我们启动El
编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Heap中获取足够的内存分配给对象,这时候就会导致内存溢出。
修改编辑tomcat的Bin文件夹中catalina文件,服务器是Windows就修改.bat的,是Linux就修改.sh在第二行加入,Windows的去掉前面的set
最近正在进行从Spring Boot往Spring Cloud上改造升级。之前部署的应用程序比较少,还没什么问题。当Spring Cloud项目逐步新增之后,问题就爆发了,服务器内存不够用了。而现有的用户体量也没必要对服务器再次进行升级,于是就开始着手Spring Boot启动时JVM内存配置的优化。
_NullPointer 出处:https://www.cnblogs.com/renwei/
附注: 从上述可知,当前云主机的发行版本为CentOS,当然,若是对于系统访问并发高,业务数据量非常之大的话,除了系统前后台代码本身质量优化之外,服务器配置(物理机or虚拟机or云主机)还可选择更高配些!
1、java.lang.OutOfMemoryError: PermGen space
服务器硬件有没有问题,网络、存储、内存、CPU情况有没有问题。如果有普罗米修斯、zabbix监控,可以直接查看监控,如果没有则需要进入服务器进行定位。
通过这一个多月的努力,将FullGC从40次/天优化到近10天才触发一次,而且YoungGC的时间也减少了一半以上,这么大的优化,有必要记录一下中间的调优过程。
导读:本文记录一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程,总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发。
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。
Tomcat调优是一个老话题,目的都是为了提高站点的吞吐和并发。这里面涉及到Tomcat本身参数的优化和JVM优化。近期在研究JVM的参数设置和Tomcat集群,所以进行了一下调优实践。需要说明的是:本文的配置肯定不是最好的,仅仅是一次实践和一次记录。步骤可以参考,但参数设置需要针对不同需求的项目来进行调整。 1、安装APR(Apache Portable Runtime) Tomcat 7 以后 Connector 默认启用 APR 协议,但是只有配置了 APR库才可以生效,否则还是会使用 BIO 或者N
在本地开发环境中我们很少有需求对JVM进行优化,但是到了生产环境我们的程序可能出现如下问题:
就是由代理创建出一个和 impl 实现类平级的一个对象,但是这个对象不是一个真正的对象, 只是一个代理对象,但它可以实现和 impl 相同的功能,这个就是 aop 的横向机制原理,这样就不需要修改源代码。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用[服务器],在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应([标准通用标记语言])下的一个应用页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。 –来自百度百科
1、什么是堆内存? Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域: 新生代 ( Young )、 老年代 ( Old )。 新生代 ( Young ) 又被划分为三个区域 Eden、 From Survivor、 To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。 2、堆内存的作用是什么? 在虚拟机启动时创建。 堆内存的唯一目的就是创建对象实例,所有的对象实例
默认端口为8080,可以通过在tomcat安装包conf目录下,service.xml中的Connector元素的port属性来修改端口。
首先heap是堆,stack是栈,stack的空间是由操作系统自动分配和释放,heap的空间是手动申请和释放的;heap的空间是手动申请和释放的,heap常用new字来分配;stack的空间有限,heap的空间是很大的自由区。在java中,如果只是声明一个对象,则在栈内存中为其分配地址空间,若将它实例化,则在堆内存中为其分配空间。
毕竟不是全职写文,工作生活之余,遇到自己想写的,又不想随便水一水、或只做一个搬运工,往往需要查阅大量相关知识来吸收、总结、抽离、创新,时间上太紧,难成好作。
上篇文章介绍了kafka的设计概要,有点对点的队列模式,和消费生产的topic模式,kafka有着高吞吐,低延迟,伸缩性,消息持久化,负载均衡故障转移特性,kafka跟其他处理内存方式不同,内存高命中率来保证发送消息直接在内存操作,而持久化直接交给系统去处理,并且持久化采用的是顺序IO,sendFile零拷贝来保证高吞吐。Kafka的负载均衡则是采用broken和topic每个都有一个master和flower,每个topic的matser和flower不在同一个broken,这样保证一个服务器宕机,其他的flower也会存储数据,不会丢失,故障转移则是 会通过会话心跳的机制跟zookeeper来实现,通过服务注册入zookeeper中,一旦服务器停止,则会选举新的服务。伸缩性也是由zookeeper来配合的,因为有多个服务,这时候则需要考虑多个服务的一致性,服务的无状态 或者 轻量级状态可以保证效率更高,所以他们统一吧状态写入zookeeper保存。
原文链接:https://www.cnblogs.com/lonelyJay/p/10076158.html
https://www.cnblogs.com/poloyy/category/1746599.html
这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。本文参考了网上很多资料,难以一一列举,在此对这些资料的作者表示感谢!关于JVM性能调优相关的资料,请参考文末。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
k8s kubectl top命令和contained内部 ps 看到的进程内存占用不一致。下午的时候,我被这个问题问倒了。具体如图
要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。
最近正在重新学习JVM的内存结构及相关优化内容,无意中看到IDEA的VM配置(安装时默认配置)中有如下的配置:
领取专属 10元无门槛券
手把手带您无忧上云