1. 程式人生 > >程式部署到伺服器的錯誤總結

程式部署到伺服器的錯誤總結

在本地開發javaEE程式,將程式部署測試完畢,部署到伺服器上,同樣的路徑、同樣的作業系統環境,但是遇到一些問題,總結記錄如下:

1.檔案訪問許可權問題

網頁訪問時候,報錯org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder
進入tomcat的安裝目錄下的logs目錄下,檢視日誌檔案,發現
java.io.FileNotFoundException: /usr/lib/apache-tomcat-8.5.14/logs/localhost_access_log.2017-05-12.txt (Permission denied)
最後定位是:tomcat下面的檔案訪問許可權
使用chmod或者chown、chgrp改變檔案訪問許可權,記得命令後緊接著加上-R引數,對目錄下的所有檔案及目錄全部修改訪問許可權。

假設最初使用sudo開啟tomcat的服務,那麼檢視work目錄

ls -alh /usr/lib/apache-tomcat-8.5.14/work/Catalina/localhost/

work目錄下的,如果開始時候,使用root許可權部署執行的,那麼將看到要執行的程式的owner以及所屬於的group是root,需要修改訪問許可權,否則換成一般使用者重新啟動tomcat服務,也將無法成功執行。
類似地,可能頁面上也有這種錯誤提示
org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.in_jsp
可使用同樣辦法修改。

jsp檔案都被編譯成一個個servlet儲存在tomcat伺服器的 $CATALINA_BASE\work[engine name][host name][webapps name]下面。

2.MySQL

2.1 Table ‘performance_schema.session_variables’ doesn’t exist

我的MySQL版本:mysql Ver 14.14 Distrib 5.7.14, for Linux (x86_64) using EditLine wrapper
hibernate連線資料庫時,無法開啟連線,原因是
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘performance_schema.session_variables’ doesn’t exist
解決辦法
登入進入到mysql環境中,如以root使用者登入

mysql -u root -p
mysql> set @@global.show_compatibility_56=ON;

另外看到這種辦法也行
mysql_upgrade -u root -p –force
但是我執行時候,報錯了,無法完成此操作,原因沒有找。

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was ×××× ms ago
檢視

mysql>  show global variables like 'wait_timeout'; 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

修改wait_timeout的值,可以參考網頁3。
或者參考網頁4,在hibernate的資料庫連線中加上以下內容

<property name="timeBetweenEvictionRunsMillis" value="64800" />
<property name="testWhileIdle" value="true" />
<property name="validationQuery" value="select 1 from dual" />
<property name="testOnBorrow" value="true" />

3.jvm地址已經被佔用或者端口占用

啟動MySQL,報地址被佔用或者埠被佔用了,需要kill掉那個佔用的程序

檢視程序的id
ps -ef | grep NAME
檢視佔用的埠
netstat -nap | grep pid
關閉(中止)程序
kill 程序ID

參考網頁
[1]Table ‘performance_schema.session_variables’ doesn’t exist
http://stackoverflow.com/questions/31967527/table-performance-schema-session-variables-doesnt-exist/33262719
[2] Table ‘performance_schema.session_variables’ doesn’t existhttp://blog.csdn.net/ppppfly/article/details/50643059
[3]MySQL第二天早上第一次連線超時報錯,解決方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:http://blog.csdn.net/cynhafa/article/details/19676865
[4]mysql dbcp Caused By: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received
http://www.cnblogs.com/dingyingsi/p/5711801.html
[5]Java異常解決總結001-org.apache.jasper.JasperException: java.lang.IllegalStateException: No output fold
http://blog.csdn.net/yanjingzhaohuole/article/details/49282945