Comprehensive guide for Oracle WebLogic Server administration, deployment, clustering, monitoring, and security in enterprise environments.
- Domain Administration
- Server Configuration
- Application Deployment
- Clustering & Load Balancing
- Security Configuration
- Database Connectivity
- JMS Configuration
- Performance Tuning
- Monitoring & Diagnostics
- Troubleshooting
# Create domain using config wizard
$ORACLE_HOME/oracle_common/common/bin/config.sh
# Create domain using WLST (offline)
$ORACLE_HOME/oracle_common/common/bin/wlst.sh
# WLST script for domain creation
wls:/offline> readTemplate('/u01/oracle/wlserver/common/templates/wls/wls.jar')
wls:/offline/base_domain> cd('Servers/AdminServer')
wls:/offline/base_domain/Server/AdminServer> set('ListenAddress','')
wls:/offline/base_domain/Server/AdminServer> set('ListenPort',7001)
wls:/offline/base_domain/Server/AdminServer> cd('/')
wls:/offline/base_domain> cd('Security/base_domain/User/weblogic')
wls:/offline/base_domain/Security/base_domain/User/weblogic> cmo.setPassword('Welcome123')
wls:/offline/base_domain/Security/base_domain/User/weblogic> cd('/')
wls:/offline/base_domain> setOption('DomainName','production_domain')
wls:/offline/base_domain> setOption('JavaHome','/usr/java/jdk1.8.0_271')
wls:/offline/base_domain> setOption('ServerStartMode','prod')
wls:/offline/base_domain> writeDomain('/u01/oracle/user_projects/domains/production_domain')
wls:/offline/base_domain> closeTemplate()
exit()
# Start Admin Server
$DOMAIN_HOME/startWebLogic.sh
# Stop Admin Server
$DOMAIN_HOME/bin/stopWebLogic.sh
Command | Description | Example |
---|---|---|
connect() |
Connect to server | connect('weblogic','Welcome123','t3://localhost:7001') |
edit() |
Start edit session | edit() |
startEdit() |
Begin configuration changes | startEdit() |
save() |
Save changes | save() |
activate() |
Activate changes | activate() |
serverConfig() |
Switch to ServerConfig MBean tree | serverConfig() |
domainConfig() |
Switch to DomainConfig MBean tree | domainConfig() |
# Connect to Admin Server
connect('weblogic','Welcome123','t3://localhost:7001')
# Navigate to domain configuration
domainConfig()
# List all servers
cd('/Servers')
ls()
# Get server information
cd('/Servers/AdminServer')
ls()
get('ListenAddress')
get('ListenPort')
# Create managed server
edit()
startEdit()
cd('/')
cmo.createServer('ManagedServer1')
cd('/Servers/ManagedServer1')
cmo.setListenAddress('server1.company.com')
cmo.setListenPort(8001)
save()
activate()
# Start managed server
start('ManagedServer1','Server')
# Stop managed server
shutdown('ManagedServer1','Server')
# startWebLogic.sh environment variables
export USER_MEM_ARGS="-Xms2048m -Xmx4096m -XX:+UseG1GC"
export JAVA_OPTIONS="-Dweblogic.Stdout=$DOMAIN_HOME/servers/AdminServer/logs/AdminServer.out"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dweblogic.Stderr=$DOMAIN_HOME/servers/AdminServer/logs/AdminServer_err.out"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dweblogic.management.username=weblogic"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dweblogic.management.password=Welcome123"
# Custom JVM arguments
export JAVA_OPTIONS="$JAVA_OPTIONS -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
export JAVA_OPTIONS="$JAVA_OPTIONS -Xloggc:$DOMAIN_HOME/servers/AdminServer/logs/gc.log"
export JAVA_OPTIONS="$JAVA_OPTIONS -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote.port=9999"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote.authenticate=false"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote.ssl=false"
# Configure Node Manager via WLST
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create machine
cd('/')
cmo.createMachine('Machine1')
cd('/Machines/Machine1')
cmo.setName('Machine1')
# Create Node Manager
cmo.createNodeManager('Machine1')
cd('/Machines/Machine1/NodeManager/Machine1')
cmo.setNMType('SSL')
cmo.setListenAddress('server1.company.com')
cmo.setListenPort(5556)
# Assign server to machine
cd('/Servers/ManagedServer1')
cmo.setMachine(getMBean('/Machines/Machine1'))
save()
activate()
# Start Node Manager
$DOMAIN_HOME/bin/startNodeManager.sh
# Enroll Node Manager
nmConnect('weblogic','Welcome123','server1.company.com','5556','base_domain','/u01/oracle/user_projects/domains/base_domain','SSL')
nmEnroll('/u01/oracle/user_projects/domains/base_domain')
# Deploy application using WLST
connect('weblogic','Welcome123','t3://localhost:7001')
# Deploy to AdminServer
deploy('MyApp','/u01/applications/myapp.war','AdminServer')
# Deploy to cluster
deploy('MyApp','/u01/applications/myapp.war','MyCluster')
# Deploy with staging mode
deploy('MyApp','/u01/applications/myapp.war',targets='MyCluster',stageMode='nostage',planPath='/u01/applications/myapp-plan.xml')
# Update application
update('MyApp','/u01/applications/myapp-v2.war',targets='MyCluster')
# Undeploy application
undeploy('MyApp','MyCluster')
# Start application
startApplication('MyApp','MyCluster')
# Stop application
stopApplication('MyApp','MyCluster')
<!-- weblogic.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app
http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd">
<wls:weblogic-version>12.2.1</wls:weblogic-version>
<wls:context-root>/myapp</wls:context-root>
<!-- Resource references -->
<wls:resource-description>
<wls:res-ref-name>jdbc/MyDataSource</wls:res-ref-name>
<wls:jndi-name>MyDataSource</wls:jndi-name>
</wls:resource-description>
<!-- Session descriptor -->
<wls:session-descriptor>
<wls:session-param>
<wls:param-name>TimeoutSecs</wls:param-name>
<wls:param-value>3600</wls:param-value>
</wls:session-param>
<wls:session-param>
<wls:param-name>InvalidationIntervalSecs</wls:param-name>
<wls:param-value>60</wls:param-value>
</wls:session-param>
<wls:persistent-store-type>replicated</wls:persistent-store-type>
</wls:session-descriptor>
<!-- Container descriptor -->
<wls:container-descriptor>
<wls:show-archived-real-path-enabled>true</wls:show-archived-real-path-enabled>
<wls:servlet-reload-check-secs>1</wls:servlet-reload-check-secs>
</wls:container-descriptor>
</wls:weblogic-web-app>
<!-- weblogic-ejb-jar.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar
xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar
http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.9/weblogic-ejb-jar.xsd">
<weblogic-enterprise-bean>
<ejb-name>OrderService</ejb-name>
<jndi-name>OrderServiceRemote</jndi-name>
<resource-description>
<res-ref-name>jdbc/OrderDB</res-ref-name>
<jndi-name>OrderDataSource</jndi-name>
</resource-description>
<transaction-descriptor>
<trans-timeout-seconds>300</trans-timeout-seconds>
</transaction-descriptor>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
# Create cluster using WLST
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create cluster
cd('/')
cmo.createCluster('ProductionCluster')
cd('/Clusters/ProductionCluster')
cmo.setClusterMessagingMode('unicast')
cmo.setWeblogicPluginEnabled(true)
cmo.setFrontendHost('loadbalancer.company.com')
cmo.setFrontendHTTPPort(80)
cmo.setFrontendHTTPSPort(443)
# Add servers to cluster
cd('/Servers/ManagedServer1')
cmo.setCluster(getMBean('/Clusters/ProductionCluster'))
cd('/Servers/ManagedServer2')
cmo.setCluster(getMBean('/Clusters/ProductionCluster'))
# Configure cluster addresses for unicast
cd('/Clusters/ProductionCluster')
cmo.setClusterAddress('server1.company.com:7100,server2.company.com:7100')
save()
activate()
# Configure session replication
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
cd('/Clusters/ProductionCluster')
cmo.setReplicationChannel('ProductionCluster-repl')
# Create replication channel
cd('/')
cmo.createNetworkChannel('ProductionCluster-repl')
cd('/NetworkChannels/ProductionCluster-repl')
cmo.setListenAddress('')
cmo.setListenPort(7100)
cmo.setProtocol('cluster-broadcast')
save()
activate()
# mod_wl_ohs.conf
LoadModule weblogic_module modules/mod_wl_ohs.so
<IfModule mod_weblogic.c>
WebLogicCluster server1.company.com:8001,server2.company.com:8001
MatchExpression /myapp
# Connection parameters
ConnectTimeoutSecs 10
ConnectRetrySecs 2
WLSocketTimeoutSecs 2
# Debug and logging
Debug ON
WLLogFile /u01/apache/logs/wlproxy.log
# SSL configuration
WebLogicSSLPassThrough ON
RequireSSLHostMatch OFF
</IfModule>
<Location /myapp>
SetHandler weblogic-handler
WebLogicCluster server1.company.com:8001,server2.company.com:8001
DynamicServerList ON
WLCookieName JSESSIONID
PathTrim /myapp
</Location>
<Location /console>
SetHandler weblogic-handler
WebLogicHost adminserver.company.com
WebLogicPort 7001
</Location>
# Configure security realm
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Access default security realm
cd('/SecurityConfiguration/base_domain/Realms/myrealm')
# Configure authentication providers
# LDAP Authentication Provider
cmo.createAuthenticationProvider('MyLDAPProvider','weblogic.security.providers.authentication.LDAPAuthenticator')
cd('/SecurityConfiguration/base_domain/Realms/myrealm/AuthenticationProviders/MyLDAPProvider')
cmo.setControlFlag('SUFFICIENT')
cmo.setHost('ldap.company.com')
cmo.setPort(389)
cmo.setPrincipal('cn=weblogic,ou=people,dc=company,dc=com')
cmo.setCredential('password')
cmo.setUserBaseDN('ou=people,dc=company,dc=com')
cmo.setUserFromNameFilter('(&(cn=%u)(objectclass=person))')
cmo.setUserNameAttribute('cn')
cmo.setGroupBaseDN('ou=groups,dc=company,dc=com')
cmo.setGroupFromNameFilter('(&(cn=%g)(objectclass=groupofnames))')
cmo.setGroupMembershipSearching('limited')
save()
activate()
# Configure SSL
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create key store
cd('/Servers/AdminServer')
create('AdminServer','SSL')
cd('/Servers/AdminServer/SSL/AdminServer')
cmo.setEnabled(true)
cmo.setListenPort(7002)
cmo.setKeystores('CustomIdentityAndCustomTrust')
cmo.setCustomIdentityKeyStoreFileName('/u01/ssl/identity.jks')
cmo.setCustomIdentityKeyStorePassPhrase('changeit')
cmo.setCustomIdentityKeyStoreType('JKS')
cmo.setCustomTrustKeyStoreFileName('/u01/ssl/trust.jks')
cmo.setCustomTrustKeyStorePassPhrase('changeit')
cmo.setCustomTrustKeyStoreType('JKS')
cmo.setServerPrivateKeyAlias('weblogic')
cmo.setServerPrivateKeyPassPhrase('changeit')
save()
activate()
# Restart server to apply SSL configuration
<!-- web.xml security configuration -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin Area</web-resource-name>
<url-pattern>/admin/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Administrators</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login-error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>Administrators</role-name>
</security-role>
# Create data source using WLST
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create data source
cd('/')
cmo.createJDBCSystemResource('MyDataSource')
cd('/JDBCSystemResources/MyDataSource/JDBCResource/MyDataSource')
cmo.setName('MyDataSource')
# Configure data source properties
cd('/JDBCSystemResources/MyDataSource/JDBCResource/MyDataSource/JDBCDataSourceParams/MyDataSource')
cmo.setJNDINames(jarray.array([String('jdbc/MyDataSource')], String))
cmo.setGlobalTransactionsProtocol('TwoPhaseCommit')
cd('/JDBCSystemResources/MyDataSource/JDBCResource/MyDataSource/JDBCDriverParams/MyDataSource')
cmo.setUrl('jdbc:oracle:thin:@dbserver.company.com:1521:XE')
cmo.setDriverName('oracle.jdbc.OracleDriver')
cmo.setPassword('password')
cd('/JDBCSystemResources/MyDataSource/JDBCResource/MyDataSource/JDBCDriverParams/MyDataSource/Properties/MyDataSource')
cmo.createProperty('user')
cd('/JDBCSystemResources/MyDataSource/JDBCResource/MyDataSource/JDBCDriverParams/MyDataSource/Properties/MyDataSource/Properties/user')
cmo.setValue('dbuser')
# Configure connection pool
cd('/JDBCSystemResources/MyDataSource/JDBCResource/MyDataSource/JDBCConnectionPoolParams/MyDataSource')
cmo.setInitialCapacity(5)
cmo.setMaxCapacity(50)
cmo.setMinCapacity(5)
cmo.setConnectionCreationRetryFrequencySeconds(10)
cmo.setTestConnectionsOnReserve(true)
cmo.setTestTableName('SQL SELECT 1 FROM DUAL')
# Target data source to cluster
cd('/JDBCSystemResources/MyDataSource')
set('Targets',jarray.array([ObjectName('com.bea:Name=ProductionCluster,Type=Cluster')], ObjectName))
save()
activate()
# Configure Multi Data Source for Oracle RAC
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create individual data sources for RAC instances
cd('/')
cmo.createJDBCSystemResource('RACDataSource1')
cd('/JDBCSystemResources/RACDataSource1/JDBCResource/RACDataSource1')
cd('/JDBCSystemResources/RACDataSource1/JDBCResource/RACDataSource1/JDBCDataSourceParams/RACDataSource1')
cmo.setJNDINames(jarray.array([String('jdbc/RACDataSource1')], String))
cd('/JDBCSystemResources/RACDataSource1/JDBCResource/RACDataSource1/JDBCDriverParams/RACDataSource1')
cmo.setUrl('jdbc:oracle:thin:@racnode1.company.com:1521:RACDB')
cmo.setDriverName('oracle.jdbc.OracleDriver')
# Create Multi Data Source
cmo.createJDBCSystemResource('MultiDataSource')
cd('/JDBCSystemResources/MultiDataSource/JDBCResource/MultiDataSource')
cd('/JDBCSystemResources/MultiDataSource/JDBCResource/MultiDataSource/JDBCDataSourceParams/MultiDataSource')
cmo.setJNDINames(jarray.array([String('jdbc/MultiDataSource')], String))
cmo.setDataSourceList(jarray.array([String('RACDataSource1'), String('RACDataSource2')], String))
cmo.setFailoverRequestIfBusy(true)
cmo.setAlgorithmType('Load-Balancing')
save()
activate()
# Create JMS Server
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create persistent store
cd('/')
cmo.createFileStore('MyFileStore')
cd('/FileStores/MyFileStore')
cmo.setDirectory('/u01/jmsstore')
set('Targets',jarray.array([ObjectName('com.bea:Name=AdminServer,Type=Server')], ObjectName))
# Create JMS Server
cd('/')
cmo.createJMSServer('MyJMSServer')
cd('/JMSServers/MyJMSServer')
cmo.setPersistentStore(getMBean('/FileStores/MyFileStore'))
set('Targets',jarray.array([ObjectName('com.bea:Name=AdminServer,Type=Server')], ObjectName))
# Create JMS Module
cd('/')
cmo.createJMSSystemResource('MyJMSModule')
cd('/JMSSystemResources/MyJMSModule')
set('Targets',jarray.array([ObjectName('com.bea:Name=AdminServer,Type=Server')], ObjectName))
# Create Connection Factory
cd('/JMSSystemResources/MyJMSModule/JMSResource/MyJMSModule')
cmo.createConnectionFactory('MyConnectionFactory')
cd('/JMSSystemResources/MyJMSModule/JMSResource/MyJMSModule/ConnectionFactories/MyConnectionFactory')
cmo.setJNDIName('jms/MyConnectionFactory')
cmo.setDefaultTargetingEnabled(true)
# Create Queue
cd('/JMSSystemResources/MyJMSModule/JMSResource/MyJMSModule')
cmo.createQueue('MyQueue')
cd('/JMSSystemResources/MyJMSModule/JMSResource/MyJMSModule/Queues/MyQueue')
cmo.setJNDIName('jms/MyQueue')
cmo.setSubDeploymentName('MySubDeployment')
# Create Sub Deployment
cd('/JMSSystemResources/MyJMSModule')
cmo.createSubDeployment('MySubDeployment')
cd('/JMSSystemResources/MyJMSModule/SubDeployments/MySubDeployment')
set('Targets',jarray.array([ObjectName('com.bea:Name=MyJMSServer,Type=JMSServer')], ObjectName))
save()
activate()
# Configure JMS clustering
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create distributed queue
cd('/JMSSystemResources/MyJMSModule/JMSResource/MyJMSModule')
cmo.createUniformDistributedQueue('MyDistributedQueue')
cd('/JMSSystemResources/MyJMSModule/JMSResource/MyJMSModule/UniformDistributedQueues/MyDistributedQueue')
cmo.setJNDIName('jms/MyDistributedQueue')
cmo.setDefaultTargetingEnabled(true)
cmo.setLoadBalancingPolicy('Round-Robin')
cmo.setForwardDelay(-1)
save()
activate()
# Set JVM parameters for production
export USER_MEM_ARGS="-Xms4096m -Xmx8192m"
export USER_MEM_ARGS="$USER_MEM_ARGS -XX:NewRatio=3"
export USER_MEM_ARGS="$USER_MEM_ARGS -XX:+UseG1GC"
export USER_MEM_ARGS="$USER_MEM_ARGS -XX:MaxGCPauseMillis=200"
export USER_MEM_ARGS="$USER_MEM_ARGS -XX:+UseStringDeduplication"
export USER_MEM_ARGS="$USER_MEM_ARGS -XX:+PrintGC"
export USER_MEM_ARGS="$USER_MEM_ARGS -XX:+PrintGCDetails"
export USER_MEM_ARGS="$USER_MEM_ARGS -XX:+PrintGCTimeStamps"
export USER_MEM_ARGS="$USER_MEM_ARGS -Xloggc:$DOMAIN_HOME/servers/AdminServer/logs/gc.log"
# WebLogic-specific tuning
export JAVA_OPTIONS="$JAVA_OPTIONS -Dweblogic.threadpool.MinPoolSize=25"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dweblogic.threadpool.MaxPoolSize=400"
export JAVA_OPTIONS="$JAVA_OPTIONS -Dweblogic.kernel.default.ExecuteThreadCount=400"
# Configure Work Managers
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create Work Manager constraints
cd('/')
cmo.createMinThreadsConstraint('MinThreadsConstraint-0')
cd('/MinThreadsConstraints/MinThreadsConstraint-0')
cmo.setName('MinThreadsConstraint-0')
cmo.setCount(5)
set('Targets',jarray.array([ObjectName('com.bea:Name=ProductionCluster,Type=Cluster')], ObjectName))
cd('/')
cmo.createMaxThreadsConstraint('MaxThreadsConstraint-0')
cd('/MaxThreadsConstraints/MaxThreadsConstraint-0')
cmo.setName('MaxThreadsConstraint-0')
cmo.setCount(20)
set('Targets',jarray.array([ObjectName('com.bea:Name=ProductionCluster,Type=Cluster')], ObjectName))
# Create Work Manager
cd('/')
cmo.createWorkManager('CriticalWorkManager')
cd('/WorkManagers/CriticalWorkManager')
cmo.setName('CriticalWorkManager')
cmo.setMinThreadsConstraint(getMBean('/MinThreadsConstraints/MinThreadsConstraint-0'))
cmo.setMaxThreadsConstraint(getMBean('/MaxThreadsConstraints/MaxThreadsConstraint-0'))
set('Targets',jarray.array([ObjectName('com.bea:Name=ProductionCluster,Type=Cluster')], ObjectName))
save()
activate()
# Enable JMX monitoring via WLST
connect('weblogic','Welcome123','t3://localhost:7001')
# Get server runtime information
serverRuntime()
cd('/ServerRuntimes/AdminServer')
ls()
# Get JVM runtime statistics
cd('/ServerRuntimes/AdminServer/JVMRuntime/AdminServer')
print 'Heap Size Current: ' + str(get('HeapSizeCurrent'))
print 'Heap Free Current: ' + str(get('HeapFreeCurrent'))
print 'Heap Size Max: ' + str(get('HeapSizeMax'))
# Get thread pool statistics
cd('/ServerRuntimes/AdminServer/ThreadPoolRuntime/ThreadPoolRuntime')
print 'Execute Thread Total Count: ' + str(get('ExecuteThreadTotalCount'))
print 'Execute Thread Idle Count: ' + str(get('ExecuteThreadIdleCount'))
print 'Standby Thread Count: ' + str(get('StandbyThreadCount'))
# Get application runtime information
cd('/ServerRuntimes/AdminServer/ApplicationRuntimes')
ls()
# Configure WLDF
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
# Create WLDF system resource
cd('/')
cmo.createWLDFSystemResource('MyDiagnosticModule')
cd('/WLDFSystemResources/MyDiagnosticModule')
set('Targets',jarray.array([ObjectName('com.bea:Name=ProductionCluster,Type=Cluster')], ObjectName))
# Configure harvester
cd('/WLDFSystemResources/MyDiagnosticModule/WLDFResource/MyDiagnosticModule')
cmo.createHarvester('MyHarvester')
cd('/WLDFSystemResources/MyDiagnosticModule/WLDFResource/MyDiagnosticModule/Harvester/MyHarvester')
cmo.setEnabled(true)
cmo.setSamplePeriod(300000) # 5 minutes
# Add harvested types
cmo.createHarvestedType('weblogic.management.runtime.JVMRuntimeMBean')
cd('/WLDFSystemResources/MyDiagnosticModule/WLDFResource/MyDiagnosticModule/Harvester/MyHarvester/HarvestedTypes/weblogic.management.runtime.JVMRuntimeMBean')
cmo.setEnabled(true)
cmo.setHarvestedAttributes(jarray.array(['HeapSizeCurrent', 'HeapFreeCurrent'], String))
save()
activate()
# Configure logging
connect('weblogic','Welcome123','t3://localhost:7001')
edit()
startEdit()
cd('/Servers/AdminServer/Log/AdminServer')
cmo.setFileName('/u01/logs/AdminServer.log')
cmo.setRotationType('byTime')
cmo.setFileTimeSpan(24)
cmo.setFileTimeSpanFactor(3600000) # 1 hour in milliseconds
cmo.setNumberOfFilesLimited(true)
cmo.setFileCount(7)
cmo.setLogFileSeverity('Info')
cmo.setStdoutSeverity('Error')
save()
activate()
Issue | Symptoms | Solution |
---|---|---|
OutOfMemoryError |
Server crashes, heap dumps | Increase heap size, analyze memory leaks |
Cannot connect to AdminServer |
Connection refused | Check server status, firewall, listen address |
Application deployment fails |
ClassNotFoundException | Verify classpath, library references |
DataSource connection errors |
Database connectivity issues | Check connection pool settings, database availability |
Cluster communication failure |
Session replication issues | Verify multicast settings, network connectivity |
# Generate heap dump
kill -3 <weblogic_pid>
# Configure automatic heap dump
export JAVA_OPTIONS="$JAVA_OPTIONS -XX:+HeapDumpOnOutOfMemoryError"
export JAVA_OPTIONS="$JAVA_OPTIONS -XX:HeapDumpPath=$DOMAIN_HOME/servers/AdminServer/logs/"
# Analyze memory usage via WLST
wlst.sh
connect('weblogic','Welcome123','t3://localhost:7001')
serverRuntime()
cd('/ServerRuntimes/AdminServer/JVMRuntime/AdminServer')
print 'Memory usage: ' + str((get('HeapSizeCurrent') - get('HeapFreeCurrent')) * 100 / get('HeapSizeCurrent')) + '%'
# Analyze thread dumps via WLST
connect('weblogic','Welcome123','t3://localhost:7001')
serverRuntime()
# Get thread dump
cd('/ServerRuntimes/AdminServer/ThreadPoolRuntime/ThreadPoolRuntime')
threadDump = get('ThreadStackDump')
print threadDump
# Monitor execute threads
print 'Total threads: ' + str(get('ExecuteThreadTotalCount'))
print 'Idle threads: ' + str(get('ExecuteThreadIdleCount'))
print 'Hogging threads: ' + str(get('HoggingThreadCount'))
# Check WebLogic ports
netstat -tlnp | grep java
ss -tlnp | grep java
# Test connectivity
telnet localhost 7001
curl -I http://localhost:7001/console/
# Check cluster communication (multicast)
java weblogic.cluster.MulticastTest -N <mcast_addr> -P <mcast_port>
# Performance monitoring script
connect('weblogic','Welcome123','t3://localhost:7001')
serverRuntime()
while True:
# JVM stats
cd('/ServerRuntimes/AdminServer/JVMRuntime/AdminServer')
heapUsed = (get('HeapSizeCurrent') - get('HeapFreeCurrent')) / 1024 / 1024
heapMax = get('HeapSizeMax') / 1024 / 1024
heapPct = (heapUsed * 100) / heapMax
# Thread stats
cd('/ServerRuntimes/AdminServer/ThreadPoolRuntime/ThreadPoolRuntime')
totalThreads = get('ExecuteThreadTotalCount')
idleThreads = get('ExecuteThreadIdleCount')
activeThreads = totalThreads - idleThreads
print 'Heap: %d MB (%.1f%%), Active Threads: %d' % (heapUsed, heapPct, activeThreads)
java.lang.Thread.sleep(5000) # Wait 5 seconds
- Oracle WebLogic Server Documentation
- WebLogic Server Administration Guide
- WebLogic Server Performance Tuning Guide
- WebLogic Scripting Tool Reference
- WebLogic Server Security Guide
Enterprise WebLogic Server cheat sheet compiled for production environments. Contributions welcome!