Saiku相关异常处理(十五)
Saiku大概是我的第一个持续更博的技术点,希望自己能在这条研究saiku的道路上越走越远嘻嘻
这里我们来记录一下研究saiku时遇到的异常信息,这篇博客会保持持续更新的。
1. Java heap space: 调节saiku启动文件start-saiku.bat/saiku-start.sh中的JVM参数信息 (根据自己电脑的内存去扩大参数值)
set CATALINA_OPTS= -Xms512m -Xmx768m -XX:MaxPermSize=256m
export CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -Xms1024m -Xmx2048m -Xss1024k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC -Dfile.encoding=UTF-8 -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true -Djava.awt.headless=true"
2. GC overhead limit exceeded : 调节saiku启动文件start-saiku.bat/saiku-start.sh中的JVM参数信息 (根据内存运行情况指定GC方式)
set CATALINA_OPTS= -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC
3. NumberFormatException: saiku执行查询时出现 这时候请注意一下自己定义的表达式 是不是字段值为空,然后参与运算的时候就会出现此异常
比如我的场景是: 在数据中有个日期字段 countdate,存储的是年月日时分秒数据,我在saiku中自定义了表达式去根据日期字段过滤出最近一周的数据,当countdatez字段为空时就会出现NumberFormatException, 表达式如下:
Datepart('ww',now()) = Datepart('ww',
DateSerial(cast(left([countdate].[countdate].CurrentMember.name,4) as Integer),
cast(mid([countdate].[countdate].CurrentMember.name,6,2) as Integer),
cast(mid([countdate].[countdate].CurrentMember.name,9,2) as Integer)))
and (
(year(now()) = cast(left([countdate].[countdate].CurrentMember.name,4) as Integer))
or
((year(now()) - cast(left([countdate].[countdate].CurrentMember.name,4) as Integer)=1))
)
and
instr(
IIF(cast(left([countdate].[countdate].CurrentMember.name,4) as Integer) = (YEAR(now())-1)
,(
iif((datediff('y',DateSerial(cast(left([countdate].[countdate].CurrentMember.name,4) as Integer),
cast(mid([countdate].[countdate].CurrentMember.name,6,2) as Integer),
cast(mid([countdate].[countdate].CurrentMember.name,9,2) as Integer)),
Dateserial(year(now())-1,12,01))>0)
and (cast(left([countdate].[countdate].CurrentMember.name,4) as Integer) =(YEAR(now())-1))
,"yes","no")
)
,"yes"
),"yes")>0
4.Error loading page (无法加载页面): 这个可以看一下后台日志,我的后台日志是说 无法找到对应的 cube信息
原因分析: 我先拖拽了一些数据保存至固定文件夹下,然后修改了xml文件中cube名,原来保存的数据cube名不见了,saiku也不会自动更新所有的,所以就会出现此异常
处理方式: 将cube名复原 ,或者也可以删除原来拖拽保存好的信息,根据现在的cube重新拖拽一份数据再保存即可。
5.NullPointerException: 这个空指针异常一点也不陌生啦对不对哈哈哈。。。
原因分析: 和异常4有些类似,也是先保存好了文件,然后修改了xml中cube的 维度或者指标名,直接打开保存好的数据文件时 就会发现找不到以前的指标或维度信息,然后就空指针异常啦
处理方式: 编辑此数据,将被修改的字段重新拖拽然后执行即可。
6.MondrianException: Mondrian Error:Internal error: Query required more than 12 iterations : 这个异常有点神奇,我这里报出这个异常是因为我的cube定义中用到了计算指标 calculatedMeasure,定义时数据类型定义错了,更改后就正常查询了。更改之前为:<CalculatedMemberProperty name="FORMAT_STRING" value="#0.00%"/> 这里是想定义数据形式为百分比,最后使用Percent去定义就成功啦!!!
<CalculatedMember name="KPI" dimension="Measures">
<Formula>cast(IIF(([Measures].[完成量]=0) and ([Measures].[總量]=0) ,"0.00",cast([Measures].[完成量] / [Measures].[總量] as string)) as Numeric)</Formula> <!--[Measures].[完成量] / [Measures].[總量] -->
<CalculatedMemberProperty name="FORMAT_STRING" value="Percent"/>
</CalculatedMember>
7. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies : 这个异常好像是随机的一样,我之前部署saiku都没有碰到过这样的问题,最近就碰到了,网上百度的时候说是tomcat的问题扫描包的相关问题,然后也有很直观的说是-XSs这个参数设定值的问题。
解决方法: 将saiku里面的tomcat下的catalina.properties文件 (tomcat/conf/catalina.properties)
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ 改为 tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ bcprov*.jar
如果这样修改后还没有解决问题,就在 saiku的tomcat下的catalina.sh文件中添加JVM参数设定信息。(saiku/tomcat/bin/catalina.sh)
export CATALINA_OPTS="-Xms1024m -Xmx2048m -Xss1024k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -XX:+UseConcMarkSweepGC"
8. Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap : Unsupported major.minor version 52.0;
异常原因: 本地编译saiku的时候用的是JDK 1.8 ,后来部署到服务器上发现服务器默认的jdk是1.7版本的,所以就报错了
解决方法: 指定tomcat启动的jdk版本为1.8 (前提是当前服务器上有安装jdk1.8哦)
修改文件 saiku-server/tomcat/bin/setclasspath.sh ,在文件 第二行 加入如下内容
#!/bin/sh #在tomcat中指定jdk版本 tomcat/bin/setclasspath.sh
export JAVA_HOME=/app/lib/jdk1.8.0_92
export JRE_HOME=$JAVA_HOME/jre
Saiku相关异常处理(十五)的更多相关文章
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
- WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- 如鹏网学习笔记(十五)ASP.NET MVC核心基础笔记
一.ASP.Net MVC简介 1,什么是ASP.NET MVC? HttpHandler是ASP.net的底层机制,如果直接使用HttpHandler进行开发难度比较大.工作量大.因此提供了ASP. ...
- 使用Typescript重构axios(二十五)——文件上传下载进度监控
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- 20190901 On Java8 第十五章 异常
第十五章 异常 要想创建健壮的系统,它的每一个构件都必须是健壮的. 异常概念 C++的异常处理机制基于 Ada,Java 中的异常处理则建立在 C++的基础之上(尽管看上去更像 Object Pasc ...
- 我的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...
- Linux Shell系列教程之(十五) Shell函数简介
本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...
随机推荐
- .net core 配置
.net core 配置包括很多种 例如内存变量.命令行参数.环境变量以及物理文件配置和自定义配置 物理文件配置主要有三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfi ...
- vue中使用scss
之前项目里我一般是使用less的,朋友问到如何引入scss,于是我就简单的跑了一下,以下主要供自己学习,如有更好的方法可以一起交流讨论一下 第一步,安装依赖 cnpm install node-sas ...
- 退出unity运行
public void GetExit()//退出运行 { #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false;//用于退 ...
- 艾妮记账本微信小程序开发(失败版)
这是一个寒假假期作业,要求是用web开发或者微信小程序或者手机app开发的,我本来是打算用微信小程序开发的,但由于这个后台数据库连接需要通过https认证后的浏览器再访问MySQL.所以做到后台数据库 ...
- DataTable插件报错:Uncaught TypeError: Cannot read property 'style' of undefined
DataTable插件报错:Uncaught TypeError: Cannot read property 'style' of undefined 原因:table 中定义的列和aoColumns ...
- YII1 增、删、改、查数据库操作
增 //注意插入的时候 是用的new Post $objectPost = new Post; $objectPost->username = $username; $objectPost-&g ...
- springboot shiro和freemarker集成之权限控制完全参考手册(跳过认证,登录由三方验证,全网首发)
本文主要考虑单点登录场景,登录由其他系统负责,业务子系统只使用shiro进行菜单和功能权限校验,登录信息通过token从redis取得,这样登录验证和授权就相互解耦了. 用户.角色.权限进行集中式管理 ...
- 剑指offer(39)平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题目分析 第一种方法: 正常思路,应该会获得节点的左子树和右子树的高度,然后比较高度差是否小于1. 可是这样有一个问题,就是节点重复遍历了,影 ...
- C# HttpWebResponse WebClient 基础连接已经关闭: 发送时发生错误.
https://blog.csdn.net/sun49842566/article/details/82802297 net 4.0 设置: ServicePointManager.SecurityP ...
- Python3学习笔记-回忆并复述是加强记忆的好方式!
http://bbs.fishc./thread-35584-1-1.html #Python好好好 操作系统:linux和mac都自带Python解释器 ->-> -> ID ...