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,定义时数据类型定义错了,更改后就正常查询了。更改之前为: 这里是想定义数据形式为百分比,最后使用Percent去定义就成功啦!!!

 
	cast(IIF(([Measures].[完成量]=0) and ([Measures].[總量]=0) ,"0.00",cast([Measures].[完成量] / [Measures].[總量] as string)) as Numeric) 
	

 

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相关异常处理(十五))