`
文章列表
我们在做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  
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占用偏高问题有帮助   堆栈占满,可能 ...
第一类:请求无响应,浏览器始终处于等待状态。 定位方法: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、认 ...
转自: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 (三) 发布/订阅。本篇博客我们准备给日志系统添加新的特性,让日志接收者能够订阅部分消息。例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息。   1、绑定(Bindings) 在上一篇博客中我们已经使用过绑定。类似下面的代码:channel.queueBind(queueName, EXCHANGE_NAME, "");绑定表示转发器与队列之间的关系。我们也可以简单的认为:队列对该转发器上的消息感兴趣。绑定 ...
转载:http://blog.csdn.net/lmj623565791/article/details/37657225 本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与实验,内容仅供参考。 上一篇博客中,我们实现了工作队列,并且我们的工作队列中的一个任务只 ...
转载:http://blog.csdn.net/lmj623565791/article/details/37620057 本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与实验,内容仅供参考。 上一篇博客中我们写了通过一个命名的队列发送和接收消息,如果你还不了解请点击:RabbitMQ 入门 Helloworld。这篇中我们将会创建一个工作队列用来在工作者(consumer)间分发耗时任务。 工作队列的主要任务是:避免立刻执行资源密集型任务,然后必须等待其完成。相反地,我们进行任务调度:我们把任务封装为消息发送给队列。工作进行在后台运行并不断的从队列中取出任务然后执行。 ...
Global site tag (gtag.js) - Google Analytics