zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    XML属性
    4.9Java游戏项目练习
    关于JVM结构的学习
    HelloWorld之Struts2
    进程调度
    JVM垃圾回收总结
    学会阅读Java字节码
    关于产品需求文档的各种D
    刘强东学习亚马逊:控制供应链 技术是最大障碍
    JVM内存溢出的方式
  • 原文地址:https://www.cnblogs.com/DFX339/p/10536431.html
Copyright © 2011-2022 走看看