-
- 启动 SuperMap iPortal 服务时,环境检查不通过的几种可能原因及解决方法。
答:SuperMap iPortal 服务需要配置 JRE 1.8 或以上版本,需要配置 SuperMap iPortal 的使用许可。
在 %SuperMap iPortal_HOME%\bin 目录下使用“iportal.bat -v”(Linux/Unix 平台使用 “./iportal.sh -v”)可以查看当前 SuperMap iPortal 的版本及配置信息。可能原因及解决方法如下:
(1) SuperMap iPortal 许可配置不正确,请确保使用许可已正确配置。许可的配置请参见许可配置说明。
(2) JRE/JDK 版本过低或者不兼容。SuperMap iPortal 支持1.8以上版本的 JRE/JDK。
- 为什么启动 SuperMap iPortal 服务时,报端口占用错误,导致 iPortal 服务启动失败?
答:SuperMap iPortal 产品包默认部署在 Tomcat 中,Tomcat 默认使用了 8190、8115端口,这两个端口被占用则无法正常启动服务。可以通过以下两种方式解决:
(1) 请退出占用端口的程序,然后重新启动 SuperMap iPortal。
(2) 修改 SuperMap iPortal 产品包中 Tomcat 的端口号,然后重新启动 SuperMap iPortal。具体方法是修改%SuperMap iPortal_HOME%/conf/server.xml 中的相关端口,如:<Server port="8016" ……>、<Connector port="8091" …… redirectPort="8454" ……>。
- 为什么运行 SuperMap iPortal 过程中报如下错误:“java.lang.OutOfMemoryError: unable to create new native thread”?
答:SuperMap iPortal 中,线程池中创建线程时会在操作系统里创建一个真正的物理线程,在某些内存小的机器上,当注册的数据量大、访问量大时,因处理高并发的请求,操作系统创建物理线程所需的内存空间会跟 Java 虚拟机堆产生内存竞争,由此导致线程创建失败(iPortal 32位安装包默认分配的最大的 Java 虚拟机内存为512M,最大线程数为300)。可通过如下方式解决:
(1) 减少分配给 java 虚拟机的内存;修改 Java 虚拟机参数,例如在 windows 版的 iPortal 包中,修改 %SuperMap iPortal_HOME%/bin/catalina.bat 中的 JAVA_OPTS,设置 -Xmx512m 为更小值;
(2) 减少 tomcat 连接池的活动线程数;修改 %SuperMap iPortal_HOME%/conf/server.xml 中,<Executor/>节点的 maxThreads 为更小值。
- SuperMap iPortal 服务崩溃的可能原因有哪些?
答:有如下可能原因:
(1)请检查本机是否安装并开启了金山毒霸杀毒软件。开启金山毒霸可能会导致 iPortal 服务崩溃。
(2)已知 Tomcat 7.0.29 版本会导致内存泄露,更换为其他 Tomcat 版本,如 Tomcat 7.0.26 即可。
- SuperMap iPortal 在非正常关闭的情况下,服务为什么会自动重启?
答:这是为了在 iPortal 服务异常的情况下,通过服务自动重启来保证 iPortal 继续正确工作。自动重启功能在如下场景中有效:
- iPortal Windows/Linux 安装包,以命令行方式启动时
自动重启功能不适用如下场景:
- iPortal 以 Windows 服务启动时
注意:SuperMap iPortal 可通过执行 shutdown.bat/shutdown.sh(位于【SuperMap iPortal 安装目录】\bin 下)或按住键盘上的 Ctrl+C 键结束服务,来正常关闭,详细请参见服务器的启动/停止。
系统配置文件(iserver-system.xml)中<properties> 节点下的<restartWhenCrash>参数,可用于控制是否启用该功能。
- SuperMap iPortal 在 Tomcat 等 Java Web 容器中,以 Windows 服务形式启动时,日志文件放在哪里?
答:当 SuperMap iPortal 以 Windows 服务形式启动时,以部署到 Tomcat 中为例,在【SuperMap iPortal 安装目录】\webapps\iportal\WEB-INF\iserver-log4j.properties 文件中,指定了日志文件的存放路径:log4j.appender.F.File=../logs/iserver.log,因此 logs 文件夹放在服务启动文件(cmd.exe)的上一级目录下,即日志文件的存放位置为:C:\Windows\logs\。
另外,用户可以修改上述 log4j.properties 文件,把指定的存放 log 文件的相对路径改为绝对路径,例如:log4j.appender.F.File=D:/Tomcat /logs/iserver.log。
- 停止 SuperMap iPortal 时,bin 下为什么会生成 *.mdmp 文件,导致磁盘占用过多?
答:停止 SuperMap iPortal 时,请使用 shutdown.bat/sh,而不是 Ctrl+C 命令。
- 如果 SuperMap iPortal 所在的操作系统配置了多个IP,如何指定 iPortal 服务所使用的IP?
答:您可以通过修改 Catalina.bat 中的 Java 虚拟机参数中的-Diserver_ip来指定 iPortal 所使用的 IP。即:修改 %SuperMap iPortal_HOME%/bin/catalina.bat 中的 JAVA_OPTS,设置-Diserver_ip为期望的IP,如:
set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1536m -XX:MaxPermSize=192m -Xss512k -Diserver_ip=192.168.12.13
- iPortal 不支持注册 localhost 和 127.0.0.1 的服务地址到门户中,那么在无法连网的情况下(单机模式),如何满足用户注册服务进行产品演示的需求呢?
答:无网的情况下,在 Windows 平台中可以通过以下方式解决注册服务问题:
在 C:\Windows\System32\drivers\etc 目录下的 hosts 文件中加入一个映射,例如:
127.0.0.1 www.iportaldemo.com
注册携带以上域名的服务地址就可以了。
- 希望在一台机器上同时启动多个 iPortal 时,应该如何操作?
答:在同一台机器上启动多个 iPortal 时,需修改 iPortal 产品包中的 Tomcat 端口号以及 ElasticSearch 端口号和集群名称,以避免端口号和集群名称冲突导致服务启动失败,您可以按以下步骤进行操作:
(1)iPortal 产品包部署在 Tomcat 中,默认使用了 8190、8115端口,您可以参考 FAQ 2,对不同 iPortal 产品包中的 Tomcat 端口号进行修改,保证不同 iPortal 的端口号互不冲突。
(2)修改不同 iPortal 中 ElasticSearch 启动的默认端口号和集群名称,即 %SuperMap iPortal_HOME%/bin/startes.bat(sh) 文件中的下述粗体代码部分,保证不同 iPortal 产品包中的 ElasticSearch 端口号和集群名称互不冲突:
java -jar c@echo off
set "CUR_DIR_TEMP=%~dp0"
set JAVA_HOME=%CUR_DIR_TEMP%\..\support\jre
set PATH=%JAVA_HOME%\bin;%path%
rem start elasticsearch
if not ""%ESDATADIR%""=="""" goto okdatadir
set ESDATADIR=%CUR_DIR_TEMP%\..\data\elasticsearch\data
:okdatadir
if not ""%ESLOGSDIR%""=="""" goto oklogdir
set ESLOGSDIR=%CUR_DIR_TEMP%\..\data\elasticsearch\logs
:oklogdir
set ESNODENAME=node1
set ESClUSTERNAME=myapplication
set ESHTTPPORT=39200
set ESTCPPORT=39300
"%CUR_DIR_TEMP%\..\database\elasticsearch\bin\elasticsearch.bat" -Epath.data=%ESDATADIR% -Epath.logs=%ESLOGSDIR% -Ecluster.name=%ESClUSTERNAME% -Enode.name=%ESNODENAME% -Ehttp.port=%ESHTTPPORT% -Etransport.tcp.port=%ESTCPPORT% -Enetwork.host=127.0.0.1 -p espid
(3)修改 iPortal 的全局搜索 spring 配置文件(%SuperMap iPortal_HOME%/webapps/iportal/WEB-INF/config/search/WEB-INF 目录下的 search-beans.xml),粗体代码部分的 port 和 clusterName 需与步骤 (2)中的 ESTCPPORT 和 ESClUSTERNAME 保持一致,如下所示:
<bean id="esSetting" class="com.supermap.iportal.search.commontypes.ESSetting">
<property name="address" value="127.0.0.1"></property>
<property name="port" value="39200"></property>
<property name="clusterName" value="myapplication"></property>
<!-- <property name="nodeName" value="node1"></property> -->
<property name="indexName" value="portalsearch"></property>
<property name="numberOfShards" value="5"></property>
<property name="numberOfReplicas" value="0"></property>
</bean>
(4)修改不同 iPortal 产品包中的 iportal.xml 配置文件,保证不同 iPortal 的全局搜索服务端口和代理服务端口互不相同,如下粗体代码部分:
<IportalConfig>
...
<modulesConfig>
<searchModuleConfig class="com.supermap.server.config.BuildinSearchConfig">
<enable>true</enable>
<reindexAllResources>true</reindexAllResources>
<startElasticSearch>true</startElasticSearch>
<port>8192</port>
</searchModuleConfig>
</modulesConfig>
...
<serviceProxy>
<enable>true</enable>
<enableBuiltinProxy>true</enableBuiltinProxy>
<port>8195</port>
...
</serviceProxy>
...
</IportalConfig>
(5)保存以上配置后,即可实现在一台机器上同时启动多个 iPortal。
- 增加资源操作成功,但资源中心不显示该资源,且控制台有类似警告如:“index ResourceItem failed. blocked by: [FORBIDDEN/12/index read-only / allow delete <api> ]; index resource document MAP1314740420 failed. update resource document MAP1314740420 failed”;资源删除失败,控制台有类似警告如:“delete resource documents ["MAP1036388859"] failed”;启用服务代理和服务访问统计功能,但服务访问统计数值不增加,且控制台有类似警告如:“update resource heatlevel failed. Failed resource id and increment: {"SERVICE243650535":1} ”。发生这些问题时,应该怎么解决?
答:iPortal 如下功能模块基于产品包内置的Elasticsearch 分布式搜索引擎实现:
- 全局搜索(SuperMap iPortal 10i+)
- 资源中心(SuperMap iPortal 10i+)
- 服务访问统计(SuperMap iPortal 11i(2022)+)
Elasticsearch 会对磁盘空间进行监控,当磁盘剩余空间达到了 floodstage 阈值,会将所有相关索引强制置为只读,导致该问题。这是 Elasticsearch 对磁盘的一种保护措施。您可选择如下解决方案:
方法1:清理磁盘,或将 iPortal 产品安装包,或您自行部署的 Elasticsearch 包,迁移到可用空间充足的磁盘中,确保磁盘使用率低于 95%(推荐方案)。
方法2:调整 Elasticsearch 的默认阈值。具体操作:
(1)在 iPortal 内置 Elasticsearch(路径:%SuperMap iPortal_HOME%/database/elasticsearch)或您自行配置的 Elasticsearch,/config/elasticsearch.yml 文件中增加如下配置:
cluster.routing.allocation.disk.watermark.low: 90%
cluster.routing.allocation.disk.watermark.high: 95%
cluster.routing.allocation.disk.watermark.flood_stage: 97%
或:
cluster.routing.allocation.disk.watermark.low: 100gb
cluster.routing.allocation.disk.watermark.high: 50gb
cluster.routing.allocation.disk.watermark.flood_stage: 10gb
其中,cluster.routing.allocation.disk.watermark.low,默认85%,用于控制磁盘的最小使用率;cluster.routing.allocation.disk.watermark.high,默认90%,用于控制磁盘的最大使用率;cluster.routing.allocation.disk.watermark.flood_stage,默认95%,超过此值时,Elasticsearch 变成只读模式,无法写入数据。关于上述参数的详细介绍,参见 Elastic 官网文档:基于磁盘的分片设置。
注意:上述配置必须同时设为百分比,或具体字节值,不能混用。
(2) 在 %SuperMap iPortal_HOME%/webapps/iportal/WEB-INF/iportal.xml 中,找到 reindexAllResources 字段,设置为 true,如下所示。(增删资源导致的失败,必须进行此项操作)
<reindexAllResources>true</reindexAllResources>
(3)重启 iPortal。
- 如果想要更改 SuperMap iPortal 内置全局搜索的配置(如端口号、集群名、节点名等),应该如何操作?
答:您可以通过以下两个步骤进行修改:
(1)打开 %SuperMap iPortal_HOME%/webapps/iportal/WEB-INF/config/search/WEB-INF 目录下的 search-beans.xml 配置文件,可以根据您业务的需要更改相关参数。
<bean id="esSetting" class="com.supermap.iportal.search.commontypes.ESSetting">
<property name="address" value="127.0.0.1"></property>
<property name="port" value="39200"></property>
<property name="clusterName" value="myapplication"></property>
<!-- <property name="nodeName" value="node1"></property> -->
<property name="indexName" value="portalsearch"></property>
<property name="numberOfShards" value="5"></property>
<property name="numberOfReplicas" value="0"></property>
</bean>
- address:Elasticsearch 的 IP 地址。默认为本机 IP:127.0.0.1,使用 iPortal 自带的 Elasticsearch。
- port:Elasticsearch 的 HTTP 协议通讯端口号。默认值:39200。
- clusterName:Elasticsearch 的集群名称。
- nodeName:Elasticsearch 的节点名称。可选配置项,如需指定 Elasticsearch 节点,在配置时需要将该行的注释打开。
- indexName:Elasticsearch 里存储 iPortal 所有资源索引的索引库名称。用户可自定义名称,若对应的索引库不存在,iPortal 将自动创建索引库。
- numberOfShards:索引分片数。设置 Elasticsearch 对索引进行划分的分片数量。默认值:5,将索引划分为 5 片。
- numberOfReplicas:索引拷贝数。默认值:0,没有拷贝索引副本。
(2)在修改完 search-beans.xml 文件后,还需同步修改 %SuperMap iPortal_HOME%/bin/startes.bat(sh) 文件中对应配置项,保持两者一致,以 startes.bat 为例,具体如下:
@echo off
set "CUR_DIR_TEMP=%~dp0"
set JAVA_HOME=%CUR_DIR_TEMP%\..\support\jre
set PATH=%JAVA_HOME%\bin;%path%
rem start elasticsearch
if not ""%ESDATADIR%""=="""" goto okdatadir
set ESDATADIR=%CUR_DIR_TEMP%\..\data\elasticsearch\data
:okdatadir
if not ""%ESLOGSDIR%""=="""" goto oklogdir
set ESLOGSDIR=%CUR_DIR_TEMP%\..\data\elasticsearch\logs
:oklogdir
set ESNODENAME=node1
set ESClUSTERNAME=myapplication
set ESHTTPPORT=39200
set ESTCPPORT=39300
"%CUR_DIR_TEMP%\..\database\elasticsearch\bin\elasticsearch.bat" -Epath.data=%ESDATADIR% -Epath.logs=%ESLOGSDIR% -Ecluster.name=%ESClUSTERNAME% -Enode.name=%ESNODENAME% -Ehttp.port=%ESHTTPPORT% -Etransport.tcp.port=%ESTCPPORT% -Enetwork.host=127.0.0.1 -p espid
- 为什么在 Linux 系统上启动 iPortal 服务时,报如下类似错误:“Unable to set localhost. This prevents creation of a GUID”?
答:出现这种现象时,请在 /etc/hosts 文件中,配置主机名对应的 IP 地址,即将主机名映射到具体的 IP 地址。如加上下面最后一行,表示将机器名 linux-3z6l 映射到 192.168.112.213。
# Syntax: # IP-Address Full-Qualified-Hostname Short-Hostname 127.0.0.1 localhost 192.168.112.213 linux-3z6l linux-3z6l
- Linux 系统没有图形界面,如何通过命令行方式配置 SuperMap iPortal 7C 使用许可?
答:通过 com.supermap.license.jar 以命令行方式配置许可包括如下四个步骤:
(1)设置 Java 环境变量,并设置环境变量 LD_LIBRARY_PATH 为 com.supermap.license.jar 所在目录:
export=./support/jre/bin/
export=./support/SuperMap_License/
(2)获取本机信息,进入 SuperMapiPortal7C\support\SuperMap_License 目录下,执行如下命令并指定生成的本机信息文件所存放的路径,在指定的路径下生成 *.c2v 文件:
java -jar com.supermap.license.jar -create /路径名/*.c2v
(3)将本机信息提交给北京超图软件股份有限公司。
将上面步骤生成的本机信息文件(*.c2v)提交给北京超图软件股份有限公司,北京超图软件股份有限公司将根据您的申请生成*.v2c 正式许可文件并返回给您,您通过该文件配置正式许可。
(4)许可生效,将您获得的*.v2c 正式许可文件指定到文件位置,执行如下命令:
java -jar com.supermap.license.jar -update /路径名/*.v2c
此外,可执行 java -jar com.superamp.license.jar -help 查看配置使用许可的相关命令,详细请参见Linux 系统下的许可配置说明。
- 在 Linux 64位操作系统上安装 SuperMap License Center 许可驱动程序时,有的会出现:“The 32bit support is missing. Please install the x86 compatibility packages required by your distribution and retry the installation. See the installation guide for more details.Aborting … “,如何解决?
答:因为该 Linux 64 位操作系统缺少 32bit 支持库,所以运行出错。解决方法是需要手动安装支持32位的支持库(参考如下列表),您可以加载系统盘补充安装相关库,或到相应系统的官网上获取相关库来安装。
- libc6-i386 和 ia32-libs(Ubuntu)
- libstdc++-devel.i686、glibc.i686、libgcc.i686、libstdc++.i686、glibc-devel.i686(RHEL、 CentOS、OpenSUSE、SLES 和 OES)
- glibc-32bit(OpenSUSE、SLES 和 OES)
对于 SUSE 系列10.3以上、Red Hat 系列5.5以上的操作系统,iPortal 提供了一个脚本文件协助您安装上述依赖库。您只需要在启动 iPortal 前,在【SuperMap iPortal 产品目录】/SuperMapiPortal7C/support/SuperMap_License/Support 下以如下方式运行:
./rpms_check_and_install_for_64bit.sh install -y
- 如果在 Hyper-v 上运行的 Linux 操作系统中,安装7C 许可失败,或在重启系统后许可不可用,该如何解决?
答:如果遇到许可安装失败,或安装过的许可不可用,可以通过以下方法把驱动卸载后重新安装。
(1)把/var/hasplm 目录删除,命令如下:
cd /var
rm -rf hasplm
(2)卸载许可驱动:
cd /SuperMapiPortal7C/support/SuperMap_License/Support/aksusbd-2.2.1-i386
./dunst
(3)重新安装许可驱动:
./dinst
- 在 Linux 操作系统上安装 SuperMap License Center 许可驱动程序时,有时会出现:“hasp_update failed with status 65”错误信息,如何解决?
答:该错误提示可以忽略,当您重复安装许可驱动时,会出现该错误提示信息,表示当前计算机已导入过90天的试用许可,试用期内不影响许可的正常使用。如果已经过了90天试用期,请联系销售人员申请继续试用或正式购买(可通过在线商店购买短期许可)。
- 为什么使用远程工具(如:putty、SecureCRT、SSH)启动 Linux 机器上的 SuperMap iPortal 7C 服务后,访问服务首页报“Could not initialize class sun.awt.X11GraphicsEnvironment”或“系统环境检查不通过”错误,而在本机上启动服务,访问服务首页却正常?
答:如果使用远程工具启动 SuperMap iPortal 7C 服务,需要首先登陆 Linux 机器,然后打开一个终端运行以下命令:
(1)X:n& 在第 n 个屏幕上启动一个 XServer , n 为任意整数(如:22、30 等)。
(2)export DISPLAY=:n.0 设置 DISPLAY 变量到本机的 XServer 服务器上,然后再重启服务即可。
- 为什么 在 Linux 操作系统上启动 iPortal 服务时,报如下类似错误:java.lang.RuntimeException : can not run elasticsearch as root?
答:iPortal 中内置了 Elasticsearch 以提供全局搜索功能。在 Linux 操作系统中, Elasticsearch 不能以 root 账户启动。如果您希望使用自行部署的 Elasticsearch 搜索服务器,只需修改全局搜索配置文件即可正常启动 iPortal;如果您使用 iPortal 内置的 Elasticsearch,则需要在 Linux 终端中,按照如下步骤启动 iPortal:
(1)useradd elastic 添加一个新的 elastic 用户。
(2)chown elastic %Supermap iPortal_HOME% -R 为新建的用户赋予添加权限,其中 %Supermap iPortal_HOME% 为 iPortal 的目录。
(3)su root 切换回 root 用户。
(4)vim /etc/security/limits.conf 修改 limits.conf 配置文件,在文件最后添加如下配置:
elastic hard nofile 65536
elastic soft nofile 65536
* soft nproc 4096
* soft nproc 4096
(5)vim /etc/sysctl.conf 修改 sysctl.conf 配置文件,在文件最后添加如下配置,增加 elastic 用户拥有的内存权限:
vm.max_map_count=655360
(6)sysctl -p 加载修改后的配置文件。
(7)su elastic 切换回 elastic 用户,运行 startup.sh,即可正常启动 iPortal。
- 如果在 Linux 操作系统上启动 iPortal服务时,卡在"Explicit INI instance has been provided, but configurationlocations have also been specified...",无法启动成功,如何解决?
答:您可以按照以下步骤修改/etc/security/limits.conf 文件:
(1)以 root 用户执行以下命令:
vi /etc/security/limits.conf
user soft nofile 65536
user hard nofile 65536
user:应写入实际的 Linux 中使用的用户名,您也可以将其替换为"*",表示该配置修改对所有用户生效。
注:上述进程最大文件打开数量"nofile"的配置值 65536 并非固定配置值,您可以根据实际情况进行修改,完成修改后,必须切换到非 root 用户登录,才能启动iPortal服务。
(2)切换到非 root 用户,执行以下命令,查看配置是否生效:
ulimit -Hu
ulimit -Su
(3)完成修改后,进入 iPortal 安装目录,执行以下命令结束当前进程后,重新启动iPortal服务。
ps -ef | grep $PWD
kill -9 iportal 进程号
iportal 进程号:通过 "ps" 命令查看与 iPortal 相关的进程及对应的进程号, 此处实际写入相关进程号。
- 如果 iPortal 部署在语言环境为英文的 Linux 操作系统中,上传含有中文的数据或输入中文内容时出现乱码,该如何解决?
答:您需要在 Linux 系统中安装中文语言包,以支持中文字符集。以 Ubuntu 20.04 为例,您只需切换到 root 用户,执行以下命令即可:
apt install language-pack-zh-hans
- 为什么有时候发送请求时服务器无法正确识别请求,即出现返回乱码、请求失败或者得到错误结果的情况?
答:发送的 HTTP 请求没有使用 UTF-8 编码导致服务器无法识别所致。对于非 ASCII 字符,SuperMap iPortal 默认使用 UTF-8 编码,如果不是,则无法正确解析。
- 为什么经 nginx 反向代理后的 iServer 服务注册到 iPortal 中,通过 iPortal 代理后,访问 iServer 代理地址页面会出现一些资源无法访问,如:地图资源,访问该服务的 rjson 表述,一些资源的 url 地址中显示的端口号不是 iPortal 的代理端口,而是 nginx 的监听端口?
答:需要修改代理 iServer 服务的 nginx 配置,打开【nginx 安装路径】\conf\nginx.conf 文件,修改 http 节点-> server 节点-> location 节点中的 proxy_set_header 内容如下:
server {
......
location /iserver{
#proxy_set_header Host $http_host;
proxy_set_header ProxyHost $http_host; }
}
将 proxy_set_header 中的 $host:port 改为 $http_host ,然后重启 nginx 即可。
- 如果在发送请求时,扫描工具提醒有host header attack漏洞,即“检测到目标URL存在http host头攻击漏洞”,应该如何处理?
答:在 SuperMap iPortal 的【SuperMap iPortal_HOME】\webapps\iportal\WEB-INF目录下,修改web.xml配置文件解决,首先定位hostHeaderAttackFilter参数,然后修改 init-param 节点-> param-value 节点中的内容如下:
<filter>
<filter-name>hostHeaderAttackFilter</filter-name>
<filter-class>com.supermap.iportal.web.filters.HostHeaderAttackFilter</filter-class>
<init-param>
<param-name>allowedHosts</param-name>
<param-value>127.0.0.1:8190,192.168.17.198:8190</param-value> <!-- 设置http请求时允许的Host -->
</init-param>
</filter>
<filter-mapping><!-- 放在其他Filter前面 -->
<filter-name>hostHeaderAttackFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在<param-value>节点中设置allowedHosts参数的值,即设置http请求时允许的host,例如,127.0.0.1:8190,192.168.17.198:8190。设置完成后,再重启iPortal服务即可。
- 为什么在iPortal中使用了nginx代理反向代理之后,上传数据量较大的数据时进度条一直卡住不动?
答:需要修改nginx配置,打开【nginx安装路径】\conf\nignx.conf文件,修改 http 节点下client_max_body_size和 keepalive_timeout的内容,设置更大的值(默认值分别为2048m,65):
......
http {
client_max_body_size 2048m;
keepalive_timeout 65;
}
client_max_body_size:表示客户端请求服务器最大允许大小,单位是兆。如果请求的数据量大于client_max_body_size中设置的值,HTTP协议会报错413"Request Entity Too Large",因此当您上传的数据量较大时,需要将参数值改大。
keepalive_timeout:表示设置客户端连接保持活动的超时时间,单位是秒。在超过这个时间之后,服务器会关闭连接,因此如果您上传数据量较大,连接时间较长,也需要修改该参数的值。完成修改后,重启nginx即可。
- 为什么以HTTPS协议启动iPortal后,全局搜索中的画框搜索图标为禁用状态,如何解决?
答:需要修改 BaseMapConfig.json 文件,打开【SuperMap iPortal_HOME】\webapps\iportal\resources\web-ui\config 目录下的 BaseMapConfig.json 文件,将“baseLayerUrl” 的地图服务地址替换为 iServer 中对应的 HTTPS 地图服务地址。配置完成后,无需重启 iPortal,刷新页面即可生效。
- 在 iPortal 中指定了 iServer 服务器作为托管服务器发布服务,当 iServer 服务器升级或产品包替换后,iPortal 无法正常发布服务,应该如何解决?
答:需要在 iPortal 编辑服务器页面,根据 iServer 服务器现状编辑托管服务器节点信息并保存,若 iServer 服务器节点信息无变更,也需要在服务器编辑页面,重新保存服务器信息,确保可以正常发布服务。
- 在 iPortal 中指定了部署在云原生环境下的 iServer 作为托管服务器,如果需要修改可用于发布服务的微服务节点数(默认限制节点数最大为2),应该如何操作?
答:您可以通过以下两种方式修改微服务节点数:
- 修改 iportal-monitor.xml 配置文件
在【SuperMap iPortal_HOME】\webapps\iportal\WEB-INF目录下,打开 iportal-monitor.xml 文件,在<monitor>节点下添加如下粗体部分代码:
<monitor>
...
<cloudNodeSelectStrategies>
<cloudNodeSelectStrategy>
<max>5</max>
</cloudNodeSelectStrategy>
</cloudNodeSelectStrategies>
</monitor>
其中,<max>节点用于设置允许创建的最大微服务节点数,您可以按需设置。需要注意的是,节点数超过三位数时,可能会影响服务器性能,请谨慎设置。
- 配置环境变量
您也可以通过配置环境变量的方式修改微服务节点数,在您的机器中,增加如下环境变量即可:
MAX_SERVICE_NODE_COUNT=5
该环境变量用于设置允许创建的最大微服务节点数,您可以按需设置。需要注意的是,节点数超过三位数时,可能会影响服务器性能,请谨慎设置。
- 如果忘记 SuperMap iPortal 初始化时创建的管理员账户密码怎么办?
答:在 SuperMap iPortal 的【SuperMap iPortal_HOME】\bin 目录下有个 passwordreset.bat/passwordreset.sh 文件,专门用来处理用户忘记系统初始化时的管理员账户密码问题。如果忘记系统初始化时的管理员账户密码,可以通过以下操作重新创建管理员账户:
(1) 停止 SuperMap iPortal 服务,即执行 【SuperMap iPortal_HOME】\bin 目录下的 shutdown.bat /shutdown.sh 文件。
(2) 执行 passwordreset.bat/passwordreset.sh 文件 。
(3) 重启 SuperMap iPortal 服务,即执行 【SuperMap iPortal_HOME】\bin 目录下的 startup.bat/startup.sh 文件。服务启动后访问 iPortal 首页时,系统会自动跳转到创建管理员账户界面,此时只需重新创建管理员账户即可。
需要注意的是:如果您是通过账户初始化配置创建的管理员账户密码,直接查看【SuperMap iPortal_HOME】\bin 目录下的 setenv.bat/setenv.sh文件,其中的“ADMINUSER”和“PASSWORD”的变量值即为初始化时创建的管理员账户密码。
- 为什么配置 CAS 认证服务器后,单点登录认证失败?
答:如果 CAS 认证服务器和 GIS 服务器不在同一台机器上,由于两台机器的时间差,可能导致登录验证不成功,这时需要调整两台机器的时间保持一致,或延长容错时间间隔,iPortal 默认的时间差容限为 3 分钟。修改容错时间差容限的方法是编辑 shiro.ini(WEB-INF 下),修改 casRealm.tolerance 参数(单位为毫秒)如下:
...
casRealm.enabled = false
casRealm.reserveSystemAccount = true
casRealm.casServerUrlPrefix = http://{ip}:{port}/cas
casRealm.casService = http://{ip}:{port}/{contextPath}/shiro-cas
casRealm.securityInfoDAO = $sqliteRealm
casRealm.tolerance = 180000
...
- 为什么正确配置了邮箱服务器后,还会提示“警告:SMTP服务器配置不合法”?
答:如果您使用的 JDK 版本为1.8及以上(iPortal 产品包中自带的 JDK 版本为1.8),当安全协议采用 SSL 或 STARTTLS 时,邮件服务器配置可能会验证不通过,提示“警告:SMTP服务器配置不合法”,需通过以下步骤解决:
(1)到 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html 下载 UnlimitedJCEPolicyJDK7.zip
(2)解压 UnlimitedJCEPolicyJDK7.zip 得到以下两个文件
- local_policy.jar
- US_export_policy.jar
(3)用这两个 jar 文件覆盖 【SuperMap iPortal_HOME】\support\jre\lib\security 目录下的同名文件(建议将原文件做备份)
(4)重启 iPortal 服务
- 在 iPortal 用户数量很大的情况下,例如:2万用户,启动 iPortal 服务会比较慢,加载用户管理页面也会比较慢,如何解决?
答:iPortal 在启动服务时,默认将所有用户信息缓存到内存,并从内存查询用户信息。如果用户数量比较大,建议用户信息不缓存到内存,实时从数据库查询,因为缓存所有用户信息需要大量的 SQL 查询,性能慢,只在具体查询时查询相关的数据即可。需通过修改【SuperMap iPortal_HOME】\webapps\iportal\WEB-INF\iserver-system.xml 配置文件解决,具体修改<management>节点-><security>节点-><SecuritySetting>节点的内容如下:
<management>
...
<security>
<SecuritySetting>
<cacheInfoToMemory>false</cacheInfoToMemory>
...
增加<cacheInfoToMemory>节点,用于设置是否将所有用户信息缓存到内存。默认值为 true,表示缓存所有用户信息到内存。针对用户数据量很大时,建议设置为 false,用户信息不缓存到内存。
- 如何理解和区分 iPortal 的普通用户角色(PORTAL_USER)和查看者角色(PORTAL_VIEWER)?
答:iPortal 的普通用户角色(PORTAL_USER)和查看者角色(PORTAL_VIEWER)区别如下:
(1)iPortal 的普通用户角色 PORTAL_USER,关联该角色的用户即为 iPortal 的普通用户,拥有使用 iPortal 门户的权限,包括使用、创建和共享门户资源;
(2)iPortal 的查看者角色 PORTAL_VIEWER,关联该角色的用户具有登录 iPortal 门户,查看与其共享的资源的权限,无法自行创建资源和管理资源。
更多关于 iPortal 的普通用户角色(PORTAL_USER)和查看者角色(PORTAL_VIEWER)的区别和联系请参见:角色和权限。
-
当用户使用 Keycloak 账户登录 iPortal 时登录失败,如何解决?
答:登录失败的原因可能有以下两个方面,iPortal 门户管理员可以按照以下步骤进行检查:
(1)Keycloak 配置存在问题。您可以参见:Keycloak安装与配置,登录 Keycloak 来检查您的配置是否正确。
(2)iPortal 中 Keycloak 登录配置存在问题。在此种情况下,无法通过 iPortal 主页的登录入口进行登录,您可以通过 iPortal 原始的登录界面(http://<ip>:<port>/iportal/web/login)登录,检查 Keycloak 登录配置,请参见:配置使用_Keycloak。
-
当用户将 iPortal 和 Keycloak 部署在不同的机器上时,在谷歌浏览器中使用 Keycloak 账户登录 iPortal 时登录失败,如何解决?
答:登录失败的原因可能是由于谷歌浏览器不允许跨域传送 cookie。此时您可以采用反向代理机制,部署一台 Nginx 代理服务器,将不同机器上的 iPortal 请求和 Keycloak 请求转发到相同的域名/IP,确保 iPortal 和 Keycloak 在谷歌浏览器中的正常通信。关于 Nginx 的部署,可以参考:服务代理独立部署的配置。
-
如果用户将 iPortal 语言环境切换为英文后,日志文件和提示信息仍然显示中文,应该如何解决?
答:您可以通过设置【SuperMap iPortal_HOME】\bin\catalina.bat(.sh) 中 Java 虚拟机参数的 -Duser.language 来指定 iPortal 日志文件和提示信息的显示语言,修改完成并保存后,重新启动 iPortal 即可生效。
- Windows 系统
在【SuperMap iPortal_HOME】\bin \catalina.bat 文件中,修改 JAVA_OPTS,增加粗体部分配置信息,设置 -Duser.language 为期望的显示语言:
set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1536m -Xss512k -Duser.language=en -Duser.country=US
- Linux 系统
在 Linux 系统中,以非 root 用户进入产品包解压后的 bin 路径下,执行以下命令,修改 catalina.sh 文件:
(1)使用 vi 命令进入文件编辑状态。
vi ./catalina.sh
(2)定位到需要修改的 JAVA_OPTS 位置,增加粗体部分配置信息,设置 -Duser.language 为期望的显示语言。
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Xms256m -Xmx1536m -Xss512k -Duser.language=en -Duser.country=US"
- 如果用户想在谷歌浏览器中将 iPortal 的全局搜索地址设置为默认搜索引擎,应该如何操作?
答:您需要先将 iPortal 全局搜索地址添加为搜索引擎,再将其设置为默认搜索引擎。具体来说,您可以按照以下步骤进行操作:
(1)在谷歌浏览器中,依次点击“设置”>“搜索引擎”>“管理搜索引擎”进入搜索引擎管理页面,点击“添加”按钮,填写如下配置信息,将 iPortal 全局搜索添加为搜索引擎:
- 搜索引擎:填写搜索引擎的名称,您可以自定义名称,如:iPortal 全局搜索
- 关键字:填写搜索引擎的关键字,您可以自定义关键字,如:127.0.0.1:8190
- 网址格式:填写搜索引擎的查询地址,参考格式:http://127.0.0.1:8190/iportal/web-ui/global-search?keyword=%s ,其中加粗部分的 ip 地址需替换为您实际使用的 ip 地址或域名
(2)添加完成后,点击搜索引擎名称右侧的 ,在下拉菜单中选择“设为默认选项”,即可将全局搜索的搜索引擎设置为默认搜索引擎
设置完成后,您在浏览器搜索栏中输入关键字,即可使用全局搜索检索 iPortal 中的资源。
- 如果用户已经创建了 SuperMap iPortal 的系统管理员账号,如:admin,此时由 SQLite 数据库切换至 MySQL 数据库,然后进行注册服务、创建地图等添加门户数据操作会报错,控制台提示“Cannot add or update a child row: a foreign key constraint fails...”?
答:因为丢失了原来 SQLite 数据库中 user_infos 表里的用户信息,需要将【SuperMap iPortal_HOME】\webapps\iportal\WEB-INF\iportaldata 下的 iportal.db 中的用户信息同步到 MySQL 数据库中。具体操作为:在 MySQL 数据库中的 user_infos 表中添加 admin 这条记录,SQL 语句为:
insert into user_infos(name,nickname) values("admin","admin");
(针对 SuperMap iPortal 8C SP1之前的版本,您还需确保 MySQL 数据库中的 servicerooturls 表是空的,如果有记录,需要删除 ),然后重启 iPortal 服务即可。
需要注意的是:如果您已经使用了 iPortal 创建地图、注册服务等,切换至 MySQL 数据库时如果想保留之前的门户数据信息,那么还需要同步 iportal.db 中的所有门户数据信息。
- 如果用户使用 MySQL 8.0 及以上版本的数据库时,启动 iPortal 失败并报如下类似错误:“Current charset is GBK. If password has been set using other charset, consider using option 'passwordCharacterEncodng'”,如何解决?
答:这是由于 MySQL 8.0 及以上版本的默认密码加密规则从 mysql_native_password 变更为 caching_sha2_password 而导致 iPortal 启动失败。您可以在连接到 MySQL 后,执行以下命令以更改密码加密规则:
use mysql;
alter user 'username'@'%' identified with mysql_native_password by 'password';
其中 username 为用户名,%为 user 表中设置的 host ,password 为用户密码,需根据 MySQL 数据库实际配置填写。配置完成后重启 iPortal 即可。
- 如果用户在设置密钥时选择的服务数目较多,添加密钥无响应,且报如下类似错误:“Error updating database. Cause: java.sql.SQLDataException: Data too long for column 'serviceIds' at row 1”,如何解决?
答:这是由于密钥对应的服务数目过多时,服务 ID 的长度超出了数据库中对应字段的字符长度限制。根据您配置的门户数据库不同(MySQL/Oracle/PostgreSQL),可尝试通过以下方法解决:
(1)MySQL 数据库:在连接到 iPortal 门户数据库后,执行以下 SQL 语句,将 serviceIds 的字段类型修改为 text:
alter table keycodes modify serviceIds text not null;
(2)Oracle 数据库:在连接到 iPortal 门户数据库后,执行以下 SQL 语句,将 serviceIds 的字段类型修改为 clob:
alter table "keycodes" rename column "serviceIds" to "serviceIds_temp";
alter table "keycodes" add "serviceIds" clob;
update "keycodes" set "serviceIds"=trim("serviceIds_temp");
alter table "keycodes" drop column "serviceIds_temp";
(3)PostgreSQL数据库:在连接到 iPortal 门户数据库 后,执行以下 SQL 语句,将 serviceIds 的字段类型修改为 text:
ALTER TABLE keycodes ALTER COLUMN serviceIds TYPE text;
- SuperMap iPortal 8C SP1 及之前的版本,使用了服务器监控功能,升级至 8C SP2 及之后的版本时,监控不到服务器信息了,该如何解决?
答:可尝试在“监控服务器”->“监控配置”页面重新输入密码后,再保存。