- 浏览: 122779 次
- 性别:
- 来自: 沈阳
最新评论
-
neusoft_jerry:
多谢楼主,mark下!
记一次JavaWeb程序的CPU占用过高的分析过程 -
天天学:
SpringBoot整合RabbitMQ实战教程网盘地址:ht ...
spring boot实战整合RabbitMQ
文章列表
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。
选择一个之前实现过的Web应用(Chapter3-1-2)为基础,启动该应用,访问一个不存在的URL,或是修改处理内容,直接抛出异常,如:
@RequestMapping("/hello")
public String hello() throws Exception {
throw new Exception("发生错误" ...
本人在SpringMvc配置thymeleaf时,遇到html中输入th: 没有自动提示的现象,苦寻无果,后查找官网信息,要加载插件才行。
打开eclipse的插件安装,Help—>Installations new SoftWare—>add
插件地址为: http://www.thymeleaf.org/eclipse-plugin-update-site/
一路next,最后重启Eclipse即可。
插件官方文档说明https://github.com/thymeleaf/thymeleaf-extras-eclipse-plugin& ...
java性能调优里有cpu消耗分析,现在我把cpu使用过高的分析过程记录下来(一般分us过高,或者sy过高,本章中以us过高为例)
1、linux下使用top或者pidstat命令查看进程消耗情况,下图使用top命令
说明:
us使用过高,也叫用户空间占用cpu过高。进程为:31808
2、接下来我们查找占用cpu较高的线程。按H键可以切换显示进程或者线程,然后按回车,如下图
说明:
可以看到有两个线程较高,31849和31850
JavaWeb应用在服务器上很耗CPU
- 博客分类:
- cpu过高
Java程序很耗CPU是比较好分析的,有这么几步:
1.通过top命令(top之后再按shift+H可以显示线程)查看CPU使用率高的线程;
2.将这个线程号转换为16进制;
3.使用jps查看服务器的Java进程号;
4.使用jstack [进程号] 打印当前的进程堆栈;
5.从打印的信息中,找到第2步得到的线程号,看看这个线程在做什么。
不一定一次就能抓准线程状态,可以第1步时多记几个线程。
<!-- Baidu Button BEGIN -->
参数检查
jinfo
线程堆栈:
jstack
kill -3/CTRL+BREAK
堆分析:
jmap -heap
jmap -histo
内存dump.bin,使用HeapAnalyser分析
GC:
gc.log,使用GCViewer或者JMeter分析
jstat
CPU:
sar
top
网络:
netstat
ifconfig
I/O:
vmstat
iostat
JVM综合分析:
JConsole
JP ...
<!-- Baidu Button BEGIN -->
其实早就想对于性能问题的定位做一个总结。正好,最近做了一些Java的WEB应用性能问题的定位的专题工作,这里简单记录一些典型的性能问题定位方法。
(比如TPS偏低、吞吐量不足等:这些指标问题由下面说的多个指标造成,故不在单独讨论的范围之内)
应用CPU占用偏高,可能的因素包括:
逻辑复杂、算法效率低下
过度逻辑
检查方法:
JProfiler检查热点,等到系统稳定以后采集数据
截取堆栈,检查runnable线程,尤其对定位吞吐量不足造成的CPU占用偏高问题有帮助
堆栈占满,可能 ...
Web项目性能问题常见定位方法梳理
- 博客分类:
- Web项目性能
第一类:请求无响应,浏览器始终处于等待状态。
定位方法:kill -3或者jstack先分析线程堆栈,找到当前block的线程。
常见于:外部接口调用无返回或者网络IO阻塞无响应;死锁;死循环;……。
第二类:宕机,进程挂掉。
定位方法(这一类问题普遍比较难定位):
(1)寻找hs_err_pidxxx.log这样的JVM日志
(2)使用JVM参数在JVM crash时写入到dump文件中
(3)catalina.out中寻找最后的日志
(4)宕机前环境数据采集
常见于:JDK bug(数次遇到过JIT引起的这一类问题);调用dll的问题;……
第三类:请求响应时间长。
...
我的这个流程是这样的,有点复杂:1. 客户打开我们的一个url2. 在这个url的后台调用httpwebrequest到一个认证程序来认证,认证程序会换回一个加密后的cookie3. 把这个cookie加入到Response.cookies里4. 调用Response.Redirect到一个新的页面,这个页面会根据那个加密的cookie来判断用户是否已通过认证现在的问题是第3步加入的cookie在那个新的页面里取不到,感觉没传过来。cookie没有设置过期日期。
----------------------------------------
你这个程序存在几个可能的问题:
1、认 ...
数据库拆分-Sharding的基本思想
- 博客分类:
- 数据库
转自:http://blog.csdn.net/bluishglc/article/details/6161475
本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
一、基本思想
Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个serv ...
数据库水平拆分和垂直拆分
- 博客分类:
- 数据库
垂直拆分
垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求。其实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分成多个弱耦合的服务,通过服务间的调用来满足业务需求看,因此表拆出来后要通过服务的形式暴露出去,而不是直接调用不同模块的表,淘宝在架构不断演变过程,最重要的一环就是服务化改造,把用户、交易、店铺、宝贝这些核心的概念抽 ...
1.下载docker,安装docker请另外百度搜索。
本教程环境win10,开启Hyper-V,不需要再安装虚拟机了
2.安装Kitematic,docker收购过来的图形界面工具,可以拉镜像,步骤如下
创建容器,点击new
搜索centos,这个是从dock ...
转载:http://blog.csdn.net/lmj623565791/article/details/37706355
上一篇博客中,我们进步改良了我们的日志系统。我们使用direct类型转发器,使得接收者有能力进行选择性的接收日志,,而非fanout那样,只能够无脑的转发,如果你还不了解 ...
RabbitMQ (四) 路由选择
- 博客分类:
- RabbitMQ
上一篇博客我们建立了一个简单的日志系统,我们能够广播日志消息给所有你的接收者,如果你不了解,请查看:RabbitMQ (三) 发布/订阅。本篇博客我们准备给日志系统添加新的特性,让日志接收者能够订阅部分消息。例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息。
1、绑定(Bindings)
在上一篇博客中我们已经使用过绑定。类似下面的代码:channel.queueBind(queueName, EXCHANGE_NAME, "");绑定表示转发器与队列之间的关系。我们也可以简单的认为:队列对该转发器上的消息感兴趣。绑定 ...
RabbitMQ (三)发布/订阅-
- 博客分类:
- RabbitMQ
转载:http://blog.csdn.net/lmj623565791/article/details/37657225
本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与实验,内容仅供参考。
上一篇博客中,我们实现了工作队列,并且我们的工作队列中的一个任务只 ...
RabbitMQ系列(二) 工作队列
- 博客分类:
- RabbitMQ
转载:http://blog.csdn.net/lmj623565791/article/details/37620057
本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与实验,内容仅供参考。
上一篇博客中我们写了通过一个命名的队列发送和接收消息,如果你还不了解请点击:RabbitMQ 入门 Helloworld。这篇中我们将会创建一个工作队列用来在工作者(consumer)间分发耗时任务。
工作队列的主要任务是:避免立刻执行资源密集型任务,然后必须等待其完成。相反地,我们进行任务调度:我们把任务封装为消息发送给队列。工作进行在后台运行并不断的从队列中取出任务然后执行。 ...