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相关异常处理(十五)的更多相关文章

  1. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  2. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...

  3. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  4. 如鹏网学习笔记(十五)ASP.NET MVC核心基础笔记

    一.ASP.Net MVC简介 1,什么是ASP.NET MVC? HttpHandler是ASP.net的底层机制,如果直接使用HttpHandler进行开发难度比较大.工作量大.因此提供了ASP. ...

  5. 使用Typescript重构axios(二十五)——文件上传下载进度监控

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  6. 20190901 On Java8 第十五章 异常

    第十五章 异常 要想创建健壮的系统,它的每一个构件都必须是健壮的. 异常概念 C++的异常处理机制基于 Ada,Java 中的异常处理则建立在 C++的基础之上(尽管看上去更像 Object Pasc ...

  7. 我的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

    前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...

  9. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

随机推荐

  1. .Net Core创建Docker镜像

    1..Net Core项目[Lails.Server.Demo]发布到目录下Lails.Server.Demo\bin\Release\netcoreapp2.1\publish 2.上面目录下新建文 ...

  2. Feign 与 Hystrix

    Feign 与 Hystrix Feign是一个声明式的web服务客户端,它使得web服务调用非常的简单,当我们使用Feign时,Spring Cloud 整合了Ribbon和Eureka,从而为我们 ...

  3. 第五篇——Struts2的默认Action

    默认Action 1.当访问action不存在时,可以通过制定默认action的方式避免出现错误代码页面: 2.使用default-action-ref 指定默认 action. 项目实例 1.项目结 ...

  4. EasyUI中使用textbox赋值,setValue和setText顺序问题

    注意两点: 当text和value的值不同时,一定要先赋值Value,然后赋值Text,否则text和value全部为Value的值. 如果只setValue,则使用getText和getValue得 ...

  5. Linux上不了网的几个排查点

    下面是所有系统通用排查流程: 1.先ping网关: 例ping 192.168.12.1: 如果能通说明本地IP配置和本地到路由器的链路未发生问题. 如果不通需要检查本地设置和本地到路由的网线连接状态 ...

  6. Linux 安装 java

    由于各Linux开发厂商的不同,因此不同开发厂商的Linux版本操作细节也不一样,今天就来说一下CentOS下JDK的安装: 方法一:手动解压JDK的压缩包,然后设置环境变量 1.在/usr/目录下创 ...

  7. Python3 批量更改文件后缀名

    Python3 批量更改文件后缀名 示例: # coding:utf8 import os import sys def Rename(): #Path = "F:\\test\\" ...

  8. [C++ Primer Plus] 第7章、函数(二)课后习题

    一.复习题 6.为什么不对基本数据类型的函数参数使用const? 8.编写一个函数,将字符串中所有c1替换成c2,并返回替换次数. #include<iostream> using nam ...

  9. Linux统计文件中单词出现的次数

    grep -E "\b[[:alpha:]]+\b"  /etc/fstab  -o | sort | uniq -c 或 awk '{for(i=1;i<NF;i++){c ...

  10. 王之泰201771010131《面向对象程序设计(java)》第八周学习总结

    第一部分:理论知识学习部分 第六章 第六章知识点主要分为1. 接口 2. lambda表达式 3. 内部类 4. 代理 1. 接口 1) Java为了克服单继承的缺点,Java使用了接口, 一个类可以 ...