日志:
2013-10-11 09:01:26 SEND_TOPIC-1
ERROR: slow sql 1860001 millis.
select * from ( select topicqueue0_.id as id1_31_, topicqueue0_.add_time as add_time2_31_, topicqueue0_.failed_count as failed_c3_31_, topicqueue0_.json_str as json_str4_31_, topicqueue0_.topic_bus_id as topic_bu5_31_ from comm_topic_queue topicqueue0_ order by topicqueue0_.add_time desc ) where rownum <= ?
[1000]
comm_topic_queue是个空表,从执行到打印出日志的时间没超过1s,但是日志记录了1860001 millis
ExecutorService 是随spring启动的
executor.execute(new Runnable() {
@OverRide
public void run()
{
busMethod();
}
});
private void busMethod()
{
//logic ....
}
7条答案
按热度按时间bzzcjhmw1#
提供的信息再完整点,连接参数怎么配置的。日志也完整点,你的意思是日志里从刚开始到结束就几秒时间,但是: slow sql 1860001 millis. 有这么多吗? 而且你标题里的jdbc exectime 和正文里的slow sql也是两个概念, slowsql功能我觉得比较简单,全程不涉及多线程,我觉得是你自己什么地方搞错了。
whlutmcx2#
1.截图中的10,11项是web请求后,业务逻辑在线程池中运行的,每个任务执行的时间都不会超过1s,截图中明显不对
2.截图中的第二项是正常的请求,时间统计也不对,请求时间才200多毫秒,jdbc用了10s
系统使用的是spring mvc,连接池的配置如下(spring annotation方式):
@value("#{jdbcProperties.url}")
private String jdbcUrl;
@value("#{jdbcProperties.username}")
private String username;
@value("#{jdbcProperties.password}")
private String password;
@value("#{jdbcProperties.schema}")
private String schema;
@value("#{jdbcProperties.validationQuery}")
private String validationQuery;
@bean(name = "dataSource", destroyMethod = "close")
@Autowired
public DataSource dataSource(ProjectEnv projectEnv)
{
DruidDataSource dataSource = new DruidDataSource();
// dataSource.setDriverClass(driverClassName);
if (jdbcUrl.trim().equalsIgnoreCase("jdbc:hsqldb:file:"))
{
jdbcUrl = jdbcUrl + ProjectEnv.getDataPath() + "/hsqldb/" + schema;
logger.info("使用HSQLDB作为数据库:{}", jdbcUrl);
}
dataSource.setUrl(jdbcUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);
// 配置初始化大小、最小、最大
dataSource.setInitialSize(1);
dataSource.setMinIdle(5);
dataSource.setMaxActive(100);
// 配置获取连接等待超时的时间
dataSource.setMaxWait(60000);
// 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
dataSource.setTimeBetweenEvictionRunsMillis(180000);
// 配置一个连接在池中最小生存的时间,单位是毫秒
dataSource.setMinEvictableIdleTimeMillis(300000);
dataSource.setValidationQuery(validationQuery);
dataSource.setTestWhileIdle(true);
dataSource.setTestOnBorrow(false);
dataSource.setTestOnReturn(false);
// 打开PSCache,并且指定每个连接上PSCache的大小
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
// 配置监控统计拦截的filters
StatFilter statFilter = new StatFilter();
// statFilter.setMergeSql(true);
// statFilter.setLogSlowSql(true);
// statFilter.setSlowSqlMillis(10000);
List filters = Lists.newArrayList();
filters.add(statFilter);
dataSource.setProxyFilters(filters);
return dataSource;
}
web.xml的DruidWebStatFilter配置如下:
DruidWebStatFilter com.alibaba.druid.support.http.WebStatFilter exclusions .js,.gif,.jpg,.png,.css,.ico,/druid/_ principalSessionName currentLoginName DruidWebStatFilter /app/_
在 2013年11月15日星期五,yuqing 写道:
我觉得是你哪些地方搞错了,你标题里的jdbc exectime 和正文里的slow sql也是两个概念,
slowsql功能我觉得比较简单,全程不涉及多线程。
—
Reply to this email directly or view it on GitHubhttps://github.com//issues/462#issuecomment-28549915
.
致
礼!
陈培安
MAIL: peream@gmail.com
MOBILE: 13691517931
vawmfj5a3#
截图总用红色的框,或者箭头文字 标注一下的,
huus2vyu4#
我没看到截图,你自己浏览器里能够看到截图? 如果可以的话,你最好能整理出一个testcase贴上来
enxuqcxy5#
我看不到的,所以让其整理一下,异常信息!不然看不明白!!
lymnna716#
前面用邮箱回复的,截图当成附件了,补一个
lokaqttq7#
截图总用红色的框,或者箭头文字 标注一下的