生产环境中,突然kkFileView使用不了,不知怎么回事,想着先重新启动一次吧,看看有没有什么报错!
一、报错信息
Caused by: java.lang.IllegalStateException: a process with acceptString 'socket,host=127.0.0.1,port=8100' is already running; pid 3435
这个报错,感觉有点怪怪的,kkFileView是默认启动端口是:8012,8100端口,应该是openoffice4的启动所使用的端口。
二、本人解决步骤
1.第一步:检测openoffice启动有没有问题
使用命令:ps -ef | grep soffice
查看是否启动成功:
发现已经启动了,所以应该不是openoffice的启动问题。
网上有人说使用修改openoffice的启动ip,把127.0.0.1修改为机器的内网ip,这个可以试一下的,不过可以先进行以下尝试:
- kkFileView有没有问题,启动的话,查看日志,看看有没有什么别的错误
- 重启kkFileView,看看错误日志
2.第二步:重新启动kkFileView
通过重新启动,发现错误为:
Caused by: java.lang.IllegalStateException: a process with acceptString 'socket,host=127.0.0.1,port=8100' is already running; pid 3435
所以这个我觉得奇怪,所以先运行bin/shutdow.sh中,然后在尝试启动./startup.sh来启动
结果一样的错误…
3.现在怀疑,是不是openoffice的启动有问题,所以要不重新启动一下openoffic吧
通过命令:ps -ef | grep soffice
然后kill掉对应的pwd,如上图中pid=7805,那么就kill 7805重新启动openoffice
# 进入 openOffice 安装目录
cd /opt/openoffice4/program/
# 在本地开启 openOffice 服务,端口为 8100。
./soffice -headless -accept="socket,host=127.0.0.1,port=8100:urp;" -nofirststartwizard &
结果启动了之后,重新启动kkFileView还是一样的错误,,
所以我尝试,修改一下openoffice启动的ip,修改为机器内网ip# 进入 openOffice 安装目录
cd /opt/openoffice4/program/
# 在本地开启 openOffice 服务,端口为 8100。
./soffice -headless -accept="socket,host=172.16.1.100,port=8100:urp;" -nofirststartwizard &
- 重新启动kkFileView
发现报错信息,不是原来的:
却是提示:端口占用,就是说8012端口占用了,Caused by: java.lang.IllegalStateException: a process with acceptString 'socket,host=127.0.0.1,port=8100' is already running; pid 3435
我觉得奇怪了,kkfileView都没有启动,怎么会占用了8012端口。。
4.查找那个家伙占用了端口:8012
- 端口查看命令: netstat -lnp | grep 8012
- 查看进程详情命令:ps 7773
如一下命令演示:
[root@iZwz96whdvutxtvdc0vydmZ ~]# netstat -lnp | grep 8012
tcp 0 0 0.0.0.0:8012 0.0.0.0:* LISTEN 7773/java
[root@iZwz96whdvutxtvdc0vydmZ ~]# ps 7773
PID TTY STAT TIME COMMAND
7773 pts/1 Sl 0:22 java -Dfile.encoding=UTF-8 -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider -Dspring.config.location=../config/application.properties -jar kkFileView-2
[root@iZwz96whdvutxtvdc0vydmZ ~]#
好家伙呢,居然就是本身kkFileView占用了8012,但是目前是kkFileView没有启动哦?
我在每一次启动kkFileView的时候,都会首先./shutdown.sh的,然后在./startup.sh;
那么只能证明是:./shutdown.sh失败,没有杀死对应的线程
最后处理步骤:把占了8012的旧的kkFileView的,使用kill 7773后,重新启动./startup.sh就ok
三、总结
- 遇到问题,不要慌,要根据报错信息,一点点寻找问题的点
- centos命令呢,对于我们java开发人员,还是懂一点为好,基本的一些运维命令,记不住,最好记录下来
- 有时候,shutdown.sh的,未必真的结束了相关的进场,最好查询以便