下面內容都來之網絡,在WebLogic11下可用,爲了方便今後的工作進行簡單的總結。
1. 在產品模式下不用輸入用戶名密碼自動啓動
修改文件:startWebLogic.sh,增加下面紅色字體部分:
SAVE_CLASSPATH=""
trap 'stopAll' 1 2 3 15
WLS_USER=”weblogic”
WLS_PW=”weblogic123”
if [ "${PRODUCTION_MODE}" = "true" ] ; then
WLS_DISPLAY_MODE="Production"
else
WLS_DISPLAY_MODE="Development"
fi
if [ "${WLS_USER}" != "" ] ; then
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.management.username=${WLS_USER}"
fi
if [ "${WLS_PW}" != "" ] ; then
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.management.password=${WLS_PW}"
fi
2. 控制檯中文輸出亂碼問題
修改文件:startWebLogic.sh,增加下面紅色字體部分
if [ "${WLS_REDIRECT_LOG}" = "" ] ; then
echo "Starting WLS with line:"
echo "${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} -Dweblogic.Name=${SERVER_NAME} -Djava.security.policy=${WL_HOME}/server/l
ib/weblogic.policy ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS}"
${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} -Dweblogic.Name=${SERVER_NAME} -Dfile.encoding=GBK -Djava.security.policy=${WL_
HOME}/server/lib/weblogic.policy ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS}
else
echo "Redirecting output from WLS window to ${WLS_REDIRECT_LOG}"
${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} -Dweblogic.Name=${SERVER_NAME} -Dfile.encoding=GBK -Djava.security.policy=${WL_
HOME}/server/lib/weblogic.policy ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS} >"${WLS_REDIRECT_LOG}" 2>&1
fi
3. 修改啓動時內存大小
修改文件:setDomainEnv.sh
修改前:
if [ "${JAVA_VENDOR}" = "Sun" ] ; then
WLS_MEM_ARGS_64BIT="-Xms256m -Xmx512m"
export WLS_MEM_ARGS_64BIT
WLS_MEM_ARGS_32BIT="-Xms256m –Xmx512m"
export WLS_MEM_ARGS_32BIT
else
WLS_MEM_ARGS_64BIT="-Xms512m -Xmx512m"
export WLS_MEM_ARGS_64BIT
WLS_MEM_ARGS_32BIT="-Xms512m -Xmx512m"
export WLS_MEM_ARGS_32BIT
fi
修改後:
if [ "${JAVA_VENDOR}" = "Sun" ] ; then
WLS_MEM_ARGS_64BIT="-Xms256m -Xmx512m"
export WLS_MEM_ARGS_64BIT
WLS_MEM_ARGS_32BIT="-Xms512m –Xmx512m"
export WLS_MEM_ARGS_32BIT
else
WLS_MEM_ARGS_64BIT="-Xms512m -Xmx512m"
export WLS_MEM_ARGS_64BIT
WLS_MEM_ARGS_32BIT="-Xms512m -Xmx512m"
export WLS_MEM_ARGS_32BIT
fi
4. 編寫重啓weblogic的腳本()
功能說明:重啓時停止服務,自動備份輸出日誌到logs目錄下,啓動服務
新建文件: restart.sh
內容:
sh ./bin/stopWebLogic.sh
mv systemLog.log ./logs/ systemLog.log.`date '+%Y%m%d%H%M'`
nohup ./startWebLogic.sh > systemLog.log &
tail -f systemLog.log
修改文件的執行權限:chmod +x restart.sh
5. Weblogic報出java.lang.OutOfMemoryError: PermGen space異常。
問題原因:Because the Classloader (and the Class objects it loaded) cannot be recycled. They are stored in the permanent heap generation by the JVM, and when you redepoy a new class loader is created, which loads another copy of all these classes. This can cause OufOfMemoryErrors eventually. 由於SUN JVM對permanent heap generation 區域的內容不做垃圾回收造成應用動態Load class文件過多引起的OutOfMemory錯誤。頻繁deploy會導致weblogic報permGen 錯誤。
修改文件:setDomainEnv.sh
解決方案:(修改-XX:MaxPermSize由原來的128M調整爲256M或512M)
MEM_PERM_SIZE="-XX:PermSize=48m"
export MEM_PERM_SIZE
MEM_MAX_PERM_SIZE="-XX:MaxPermSize=512m"
export MEM_MAX_PERM_SIZE
6. weblogic 部署出現too many file opens
問題原因: linux系統對用戶打開太多文件的數量有限制,可以通過ulimit –a 查看到open files (-n) 1024。
修改文件:/etc/security/limits.conf,commEnv.sh(weblogic的公用環境設置文件)
修改內容:將文件中打開文件數限制從原來的1024調整爲更大。
文件中增加下面內容:(user1 爲對應的系統用戶名)
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
User1 hard nofile 65535
User1 soft nofile 65535
commEnv.sh文件的修改:(下面這段腳本沒太看懂,在上面的方案還不好使得情況下使用下面的修改)
# limit the number of open file descriptors
resetFd() {
if [ ! -n "`uname -s |grep -i cygwin || uname -s |grep -i windows_nt || /
uname -s |grep -i HP-UX`" ]
then
maxfiles=`ulimit -H -n`
if [ "$?" = "0" -a `expr ${maxfiles} : '[0-9][0-9]*$'` -eq 0 ]; then
ulimit -n 65535
fi
fi
}
7.Weblogic部署Hibernate3出現ClassNotFoundException: org.hibernate.hql.ast.HqlToken的問題。
問題原因:WebLogic已經集成了antlr包 ,在使用Hibernate時,會先加載其本身所帶的antlr包, 所以會和Hibernate 捆綁的antlr包衝突。可以通過修改hibernate的hibernate.query.factory_class參數爲org.hibernate.hql.classic.ClassicQueryTranslatorFactory,但是這樣會導致部分複雜的sql服務在hibernate下使用。下面介紹不調整這個參數的兩種解決方案。
解決方案:(下面的解決方案不一定起作用,具體問題具體分析)
①:修改應用的weblogic.xml文件:增加下面問容,讓系統啓動優先加載應用中使用的lib包。
<container-descriptor>
<servlet-reload-check-secs>-1</servlet-reload-check-secs>
<session-monitoring-enabled>true</session-monitoring-enabled>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
②:上傳antlr-2.7.6.jar到${DOMAIN_HOME}/lib/,修改domain的setDomainEnv.sh文件
JAVA_PROPERTIES="${JAVA_PROPERTIES} ${CLUSTER_PROPERTIES}"
export JAVA_PROPERTIES
# Clear the pre_classpath here in case an application template wants to set it before the larger pre_classpath is invoked below
PRE_CLASSPATH="${DOMAIN_HOME}/lib/antlr-2.7.6.jar:"
export PRE_CLASSPATH