Jump to content
Changes to the Jaspersoft community edition download ×

rmiller

Members
  • Posts

    64
  • Joined

  • Last visited

 Content Type 

Profiles

Forum

Events

Featured Visualizations

Knowledge Base

Documentation (PDF Downloads)

Blog

Documentation (Test Area)

Documentation

Dr. Jaspersoft Webinar Series

Downloads

Everything posted by rmiller

  1. IssueWhen you export a report to PDF the report displays in the browser in PDF format. However, when the report contains a Charts Pro chart (fusion chart) the chart will not display in the browser with default browser plugin settings, they just display a white area where the chart should be. ResolutionAdobe Reader or Adobe Acrobat must be installed, during installation a plugin will be installed in all browsers. The browser will use this plugin to render the fusion charts. There is a difference between Windows and Macintosh browser's PDF behavior so I will treat them separately. WindowsChrome:In Chrome open a new tab and type "about:plugins."Locate the "Chrome PDF Viewer" plugin and disable it.Locate the "Adobe Reader" plugin and enable it. Firefox:Click on the three horizontal bars on the toolbar and select "Options."Click on the "Applications" tab.Scroll down and locate the "Portable Document Format (PDF)" content type. In the Action drop down menu select "Use Adobe Acrobat (in Firefox)." IE: (using IE 10)Click on the gear in the toolbar and choose "Manage add-ons."Click on "Toolbars and Extensions" in the left pain and choose "Run without permission" from the Show drop down menu.Enable the "Adobe PDF Reader" extension. Macintosh (using OS X 10.9)Fusion charts are not supported on the Mac in either Chrome or Firefox, but there is a workaround to export the PDF to disk. Chrome:In Chrome open a new tab and type "about:plugins."Locate the "Chrome PDF Viewer" plugin and disable it.Locate the "Adobe Reader" plugin and disable it. The PDF will now export to disk. Firefox:Click on the three horizontal bars on the toolbar and select "Preferences."Click on the "Applications" tab.Scroll down and locate the "Portable Document Format (PDF)" content type. In the Action drop down menu select "Use Adobe Reader (default)." The PDF will now export to disk. Safari:From the "Safari" menu choose "Preferences."Select the Security tab and click on "Manage Website Settings..." Select "Adobe Reader" in the left pane.Choose "Allow Always" in the drop down menu at the bottom right.
  2. Differences between the Monitoring reports and Audit reportsMonitoring ReportsMonitoring reports only contain information about report events. Monitoring is included with the standard JasperReports license. In order to have the Monitoring data available to the Monitoring reports you must enable both Audit and Monitoring in WEB-INF/js.config.properties setting the following properties to true. audit.records.enabled=true monitoring.records.enabled=true Audit ReportsAudit reports contain information about general and repository events, user events, role events, as well as report events. Audit reports can be enabled only if you have purchased Audit and it has been added to your license. See sections 10.3.1 and 10.4.1 in the TIBCO JasperReports Server Administrator Guide for a complete list of events for Audit and Monitoring respectively.
  3. IntroductionThe standard JVM arguments recommended by Jaspersoft (see the install guide) are adequate for most JasperReports Server (JRS) installations where concurrency is not high. However, with installations with high traffic requirements it is necessary to eke out as much performance as possible from the application server. This is done by fine tuning the young generation of the JVM to make garbage collection more efficient. Tuning the JVM is not an exact science, it must be done by trial and error, and since every environment is different (size and quantity of reports, size of repository, machine specifications, etc.) the tuning parameters will be slightly different for each environment. Thus, the tuning parameters described in this article should be considered a guide, not hard and fast specification. Garbage Collection OverviewThe Java Virtual Machine (JVM) consists of three areas where java objects live out their lives, the Permanent Generation, the Old Generation and Young Generation, collectively known as the heap. When the application server is started up most of the objects created are stored in the permanent generation and virtually all of them stay there until the application server is shut down. As objects are created while the application is used they first live in the young generation, and since most objects have a very short lifespan the are removed from the young generation during minor garbage collections. Objects that are longer lived get promoted (tenured) to the old generation. These are removed during full garbage collections, and are called stop the world collections because all activity in the JVM is stopped while the garbage collection is taking place. Since the old generation is larger and contains more objects full garbage collections are more costly in terms of time than minor collections. So, the objective of fine tuning the JVM is to ensure more minor collections and less full collections. The young generation consists of the eden space and two survivor spaces. Newly created objects are located in the eden space. When the eden space becomes full a garbage collection takes place and the surviving objects are copied to one of the survivor spaces. When that survivor space fills up the objects are copied to the other survivor space at the next minor collection along with any surviving objects from eden. The JVM keeps track of how many times each object is copied from one survivor space to the other and when an object reaches a certain number, called the tenuring threshold (dynamically set by the JVM), it is promoted to the old generation. So the main objective is to size the young generation spaces to ensure that more objects are collected in the young generation before being promoted to the old generation. The sizing is done using the NewRatio and SurvivorRatio JVM options. The NewRatio determines the size of the overall size of the young generation. For example, NewRatio=2 means that the ratio between the young and old generation is 1:2, or the young generation will be one third the size of the old generation. The SurvivorRatio determines the size of the eden space and the two survivor spaces with respect to the total young generation size. SurvivorRatio=6 sets the ratio of the eden and a survivor space to 1:6, meaning each survivor space will one sixth the size of the eden space, or one eighth the size of the young generation (there are two survivor spaces). MethodologyI determined the young generation sizes by generating load using JMeter. The JMeter scripts executed six sample reports and the Supermart Dashboard with 30 concurrent virtual users. The JRS was version 5.5 installed on an Ubuntu server with Tomcat 7, JDK 7, and Postgres database. First I ran baseline tests using the recommended JVM options with 8 GB maximum heap and 512 MB maxPermSize and ConcurrentMarkSweep garbage collection. I ran multiple tests with a one hour duration, restarting the application server before each test run. The primary metric was the average response time for all requests and I recorded the average of the average response time for each test. Then I ran tests using different values for -XX:NewRatio and -XX:SurvivorRatio, again recording the average of average response time for each test. The test results varied widely for the one hour test runs, so after determining the best tuning values for the young generation I ran a series of tests for an eight hour duration, four baseline tests and four tuned JVM tests. In the end I got a nearly 20% performance improvement using NewRatio=2 and SurvivorRatio=8. Test ResultsTest RunAverage (ms)Avg. of Avg.MaxMin% Diff.Baseline 8 hour 166370577366319.37 %Baseline 8 hour 2715 Baseline 8 hour 3773 Baseline 8 hour 4668 NR2 SR8 8 hour 1625568625564 NR2 SR8 8 hour 2581 NR2 SR8 8 hour 3564 NR2 SR8 8 hour 4503
  4. Issue:I have a report with a subreport, but when I run or compile the subreport it does not create a .jasper file to use in the main report. Resolution:In Jaspersoft Studio select the menu item Project->Build Automatically. Now Studio will create the .jasper file in the same location as the .jrxml file.
  5. Issue:When creating an object, e.g., an organization, using rest_v2 ehcache does not get updated across the cluster. Resolution:First IP Multicast must be enabled on each server in the cluster. The configuration is different for the two main Linux flavors. Ubuntu:Add or uncomment the following lines in /etc/sysctl.conf. net.ipv4.icmp_echo_ignore_broadcasts=false net.ipv4.ip_forward=1 Lookup the network device used for the multicast traffic by typing ifconfig. You’ll get a list of devices with their names on the left. Typically eth[0-9], e.g., eth0. Remember the name of the device you’ll want to use it in the next step. Add this line to /etc/network/interfaces. up route add -net 224.0.0.0/4 mask 240.0.0.0 dev eth[0-9] Reboot the servers. Fedora:Add or uncomment the following lines in /etc/sysctl.conf. net.ipv4.icmp_echo_ignore_broadcasts=0 net.ipv4.ip_forward=1 Lookup the network device used for the multicast traffic by typing ifconfig. You’ll get a list of devices with their names on the left. Typically eth[0-9], e.g., eth0. Remember the name of the device, you’ll use it in the next step. Create or edit the file /etc/sysconfig/network-scripts/route-eth[0-9] on each server and add the following lines. GATEWAY0=0.0.0.0 NETMASK0=240.0.0.0 ADDRESS0=224.0.0.0 If there is already a "0" appended to the configuration as above then append "1" to the elements. Reboot the servers. To test the network settings:Type "cat /proc/sys/net/ipv4/ip_forward." This must return 1. Type "cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts." This should return 0. Type "ping 224.0.0.1 | grep <IP address of other server in cluster>". You should see the IP address. Modify ehcache configuration files:Add the "hostname" property to the cacheManagerPeerProviderFactory and cacheManagerPeerListenerFactory beans in the following files: WEB-INF/ehcache.xml WEB-INF/ehcache_hibernate.xml WEB-INF/classes/ehcache_hibernate.xmlThe configuration will look like this: <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="hostName=172.17.10.124,peerDiscovery=automatic, multicastGroupAddress=228.0.0.1, multicastGroupPort=4446, timeToLive=1"/> <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" properties="hostName=172.17.10.124,port=40011,remoteObjectPort=40012,socketTimeoutMillis=120000"/> Restart the servers. To test the configuration first create an organization using the JasperReport Server UI. In the following examle the organization is testorg1. Using a REST client send the following URL to any other node in the cluster: http://172.17.10.125:8080/jasperserver-pro-561/rest_v2/organizations/testorg1/roles You should receive a 204 No Content HTTP response (there are no roles in the organization). In versions 5.x there is a bug that prevents the automatic replication across the cluster of ehcache. This is fixed in version 6.0. There is a patch for 5.5, 5.6 and 5.6.1. Open a case and request the patch from the support engineer.
  6. IssueUsing a Redshift datasource in a Virtual Datasource (VDS) in JasperReports Server v5.6.0 produces the following error when opening a Domain Designer using the VDS: [toc]ERROR BaseJdbcMetaDataFactoryImpl,http-bio-7560-exec-7:359 - Cannot get database meta info : /public/Samples/Data_Sources/Virtual_DB_Tester org.teiid.jdbc.TeiidSQLException: Error trying to obtain metadata information for the tables that match %: TEIID30489 Unable to load metadata for VDB name.[/code]ResolutionVirtual data sources are based on the Teiid engine to handle multiple data sources and combine the results from them. In JasperReports Server v5.6 the Teiid library was upgraded to the latest version, but an unforseen consequence of this is that Teiid is unable to get the foreign keys from the database metadata using the Postgres driver, thus producing the above error. Since JasperReports Server does not use this metadata the workaround for this issue is to configure the VDS to not retreive the metadata. Search for importPropertyMap in applicationContext-virtual-data-source.xml, uncomment it and add the following map. <property name="importPropertyMap"> <map> <entry key="REDSHIFT_DS_NAME"> <map> <entry key="importer.importKeys" value="false"/> <entry key="importer.importForeignKeys" value="false"/> <entry key="importer.importIndexes" value="false"/> <entry key="importer.importStatistics" value="false"/> </map> </entry> </map> </property>[/code]Replace REDSHIFT_DS_NAME with the name of your Redshift datasource. Note: If you created an alias for the Redshift datasource in the VDS you must use the alias instead of the datasource name in the entry key.
  7. IssueA customer reported that while creating an Ad Hoc crosstab report using a table with only 150,000 records they encountered and OutOfMemory exception with a 4 GB heap. Checking in the database they found that the table consumed only 6.5 MB of data, so what went wrong? ResolutionWhen you use a high-cardinality field (a field with a large number of unique values) in a crosstab as a group, there is the possibility of using a lot of memory. The large amount of memory is not storing the actual data values -- it's used for data structures that take part in crosstab calculations. This data is only generated when you use the field for grouping. By default, numeric fields are added to the crosstab as measures, which will not incur extra memory, but you can change any measure to a field (menu option "use as field") so that it can be used as a group. However, if you have a high-cardinality field of string type, it can be added as a group directly, and you may see this problem. Here are a number of things that can be done to reduce huge memory usage: Don't include high-cardinality string fields in the domain if they're not really needed; working with huge value lists can be cumbersome so you may want to examine the need for working with these particular fields. Use domain security at the column level so that only experienced users can get access to the fields. Find another way to get the results from fields with high cardinality, perhaps by defining a calculated field based on the high-cardinality field. Change the configuration for baseCategorizer bean to reduce maxMembers. In applicationContext-catFactory.xml the baseCategorizer bean limits the size of a dimension, currently set to 100000. If the number of values exceeds this, the rest of the values are grouped in a node called "Other". By decreasing this value, the user could get some protection against enormous crosstabs. <bean id="baseCategorizer" abstract="true" class="com.jaspersoft.commons.dimengine.Categorizer"> <property name="maxMembers" value="100000"/> </bean>
  8. Hmm... The attachment seems to have gone away. Here is a link to instance types with the same information, http://aws.amazon.com/ec2/instance-types/.
  9. I have attached a file with information about AWS instance sizes. I would say that the minimum you will need is is an m1.large with 7.5 GB RAM. BTW, AWS is moving to the M3 instances. You should consider for yourself. Here's what AWS says about it: "M3 instances provide better, more consistent performance than M1 instances for most use-cases. M3 instances also offer SSD-backed instance storage that delivers higher I/O performance. M3 instances are also less expensive than M1 instances. Due to these reasons, we recommend M3 for applications that require general purpose instances with a balance of compute, memory, and network resources." http://aws.amazon.com/ec2/previous-generation/
  10. You have only 4 GB RAM on an m1.medium instance, which is minimal for large data sets like yours. Most of the OOMs (OutOfMemoryError) before today are in the PermGen space so you will have to increase that, you probably have 512M at this time, increase it to 1024M. Starting today the OOMs are all in the heap space, which is what caused the server to freeze. You probably have only 2 GB maximum heap which is way to small to handle 11M row result sets. It looks like you will have to move to a larger EC2 instance with enough RAM to handle your needs.
  11. That depends on which version and which license. For the community version, not out of the box, though it would not be difficult to implement if you have programing chops. For the pro version you have to have auditing enabled in your license, then you can use the audit reports to see when the last time a report was rrun.
  12. OK, your Tomcat is running but the jasperserver application likely did not launch correctly. 1. Check <tomcat-install-dir>/logs/catalina.out and look for any errors on startup. 2. Enable the Manager app or PSI Probe (my preference, see http://community.jaspersoft.com/wiki/psi-probe-replacement-tomcat-manager) and check to see if the jasperserver app is running. Let us know what you find.
  13. PSI (Greek letter pronounced 'sai') Probe is an open source fork of Lambda Probe which has been inactive since 2006. PSI Probe does everything that Tomcat Manager does plus much, much more. Installation is as simple as adding the war file to the Tomcat webapps directory, adding roles to tomcat-users.xml, and then restarting the server. Installation details can be found here: https://code.google.com/p/psi-probe/wiki/InstallationApacheTomcat . Probe is also compatible with the JBoss and WSO2 application servers. Once installed and running probe is accessed using the URL similar to http://localhost:8080/probe. You will arrive at the home page with a list of applications and their current status. Click on the jasperserver-pro application and you will see the Summary page with a number of tabs on the right side of the page. The sessions page shows all active sessions, click on a session and you will see details about the session, including the ability to kill a session. Click on the Logs tab and you can examine a log and even tail one of the log files in real time. The Treads tab lists all active threads and provides information about their state, plus how many times they have been in Waiting and Blocked state. A very useful feature is the Memory utilization page under the System Information tab. Here you can monitor memory utilization in the various JVM memory spaces. The Quick check tab provides a sanity check on the application server health with respect to running out of database connections, running out of memory, or losing access to resources on the file system. Quick check will:Scan all available data sources and generate a maximum usage score for them.Allocate one megabyte of memory into a byte array as an attempt to push the memory usage over the high watermark.Create and then delete 10 files in a temporary directory.Quick Check will report failure when:At least one of the declared data sources is 100 percent used.A memory allocation test (1 MB) generates an OutOfMemory exception.A file-creation test encounters an IOException. For a full list of features, FAQ, downloads and more go to https://code.google.com/p/psi-probe/w/list.
  14. Issue:Logging long-running queries means having to tediously parse the logs and make sense of what's there, see http://community.jaspersoft.com/wiki/logging-long-running-queries-postgres-and-mysql-databases. Beginning with PostgreSQL version 8.4, pg_stat_statements was added to track metrics for queries such as the number of times a query was called, the total number of rows retrieved by a query, the total time spent in a statement and more. So now, everything is in the database! Resolution:Enabling pg_stat_statementsSu to user postgres Navigate to the postgres data directory (see the long-running query article above to find the location for various systems) Stop the database server pg_ctl stop -D /var/lib/pgsql/data -m fast Open postgresql.conf and search for "shared_preload_libraries." Uncomment the line and add 'pg_stat_statements' inside the single quotation marks. The line will look like: shared_preload_libraries = 'pg_stat_statements' # (change requires restart) Save the file and start the database pg_ctl start -D /var/lib/pgsql/data Connect to the repository database using a SQL client and run CREATE extension pg_stat_statements; This will ceate the pg_stat_statements view and you can run a variety of queries on it, such as SELECT (total_time / 60) as total_minutes, total_time, (total_time/calls) as average_time, calls, query FROM pg_stat_statements ORDER BY 1 DESC LIMIT 100; SELECT count(*), query FROM pg_stat_statements GROUP BY 2 ORDER BY 1 DESC LIMIT 10; Note that prior to 9.1 total_time was measured in seconds, from 9.2 on it is measured in milliseconds.
  15. Monitoring report performance using the auditing feature in JasperReports Server is very useful in identifying slow reports and long running queries, however there is significant overhead and performance degradation when auditing is enabled. With this in mind caution should be used when enabling auditing in production environments. The following table shows the response time of various reports and dashboards during a load test of JasperReports Server v5.5 with and without auditing enabled. As can be seen there was an overall 35% increase in response time when auditing was enabled. The tests were run with 20 virtual users on a MacBook Pro with 8 GB RAM and 4 GB heap. Average Response Time (ms) TransactionWithout AuditWith Audit% DifferenceLogin Page26533053-13%Home Page118410948%View Repository13221334-1%AllAccounts View Report1373822307-38%Geographic Results View Report1596719560-18%View Customer Detail Report2701250227-46%View Dashboard85187124113-31%View Supermart Cusotmer Detail Report1524626250-42%Logout23554843-51%TOTAL1829628087-35%
  16. Issue:Beginning with JasperReports Server v5.0, the property maxBytesLocalHeap was added to adhoc-ehcache.xml to limit the size of in-memory Ad Hoc cache so that it does not grow to consume the entire heap. But the limit was never enforced until JasperReports Server v5.6. By default the limit is set to 300 MB. There is a potential performance issue here because once the limit is reached, as new items are added to the cache the oldest items are evicted. Constantly updating the cache creates a great deal of overhead. Resolution:Edit WEB-INF/adhoc-ehcache.xml and set the value for maxBytesLocalHeap to be at least half of your heap size. So, if you have your heap size set to -Xmx4048m then set maxBytesLocalHeap=2024m.
  17. Click on the Docs tab in the community site where you will find the iReport Ultimate guide. There are also a number of free classes on the Oline Learning Portal, https://www.jaspersoft.com/scorm_data/DevelopingReportswithJaspersoftiReportDesigner_1899/data/execute .
  18. IssueYou are experiencing slow performance navigating the repository or opening ad hoc views or domains. You enable audit logging but do not see any signifcant long running queries. The problem may be hibernate queries but they do not appear in the audit reports. How do you log the query times for these queries? ResolutionHere's the procedure to configure long-running query logging for MySQL and Postgres databases. MySQLHow to start and stop the databaseMacintosh OS X: rons-mbp:apps rmiller$ sudo /usr/local/mysql/support-files/mysql.server stop rons-mbp:apps rmiller$ sudo /usr/local/mysql/support-files/mysql.server start rons-mbp:apps rmiller$ sudo /usr/local/mysql/support-files/mysql.server restartMost versions of Linux: [engineer@fed1764-csauto ~]$ sudo service mysql stop [engineer@fed1764-csauto ~]$ sudo service mysql start [engineer@fed1764-csauto ~]$ sudo service mysql restart Modifying the configuration fileOpen in a text editor /etc/my.cnf and add the following lines. log-slow-queries slow_query_log = 1 # 1 enables the slow query log, 0 disables it slow_query_log_file = <path to log filename> long_query_time = 1000 # minimum query time in milliseconds Save the file and restart the database. In this example queries running 1 second or longer will now be logged to the slow query file. PostgresHow to start and stop the databaseMacitosh OS X rons-mbp:apps rmiller$ su postgres rons-mbp:apps rmiller$ pg_ctl -D /Library/PostgreSQL/9.1/data stop -m fast rons-mbp:apps rmiller$ pg_ctl -D /Library/PostgreSQL/9.1/data start rons-mbp:apps rmiller$ pg_ctl -D /Library/PostgreSQL/9.1/data restartFedora/SUSE [engineer@fed1764-csauto ~]$ su postgres [engineer@fed1764-csauto ~]$ pg_ctl stop -D /var/lib/pgsql/data [engineer@fed1764-csauto ~]$ pg_ctl start -D /var/lib/pgsql/data [engineer@fed1764-csauto ~]$ pg_ctl restart -D /var/lib/pgsql/dataRed Hat/Ubuntu engineer@ub1164:~$ su postgres engineer@ub1164:~$ /etc/init.d/postgresql stop engineer@ub1164:~$ /etc/init.d/postgresql start engineer@ub1164:~$ /etc/init.d/postgresql restart Modifying the configuration fileLocation of the configuration file:OS X: /Library/PostgresSQL/9.1/data/postgres.confFedora/SUSE: /var/lib/pgsql/data/postgres.confRed Hat/Ubuntu: /etc/postgresql/9.1/main/postgresql.confOpen the configuration file in a text editor. Uncomment the following line and set the minimun duration. log_min_duration_statement = 1000 # -1 is disabled, 0 logs all statements # and their durations, > 0 logs only # statements running at least this number # of milliseconds To log milliseconds set log_file_prefix = '%m' log_line_prefix = '%m' # special values: # %a = application name # %u = user name # %d = database name # %r = remote host and port # %h = remote host # %p = process ID # %t = timestamp without milliseconds # %m = timestamp with milliseconds # %i = command tag # %e = SQL state # %c = session ID # %l = session line number Save the file and restart the database.
  19. IntroductionIn this article, we will show how to install and configure the Apache HTTPD server to connect with JasperReports Server using the mod_jk module, and then configure it as a secure server using the mod_ssl module. In this article we describe how to do this on Linux Fedora – see this page for the procedure to install the web server on Ubuntu. Install Apache Web ServerYou must be logged in as root. From the command line type: [root@fed1764-csauto mod_jk]# yum -y install httpd[/code]Install and Configure mod_jkGo to http://tomcat.apache.org/download-connectors.cgi and download the "JK 1.2.xx Source Release tar.gz" archive. Create the directory /root/mod_jk and move the archive to it. Unpack the archive: [root@fed1764-csauto mod_jk]# tar -xvf tomcat-connectors-1.2.xx.tar.gz[/code]To build the package you may need to download the httpd-devel package. To find out if it is already installed type “which apxs” at the command line, if it is not available install it using the following command. [root@fed1764-csauto mod_jk]# yum -y install httpd-devel[/code]Navigate to the tomcat-connectors-1.2.xx-src/native directory in your expanded archive and compile the package. [root@fed1764-csauto mod_jk]# ./configure --with-apxs=/usr/sbin/apxs[root@fed1764-csauto mod_jk]# make[root@fed1764-csauto mod_jk]# make install[/code]This will compile and install the mod_jk.so module into /etc/httpd/modules directory. Configure the mod_jk moduleNavigate to /etc/httpd/conf and open httpd.conf in a text editor. Add the following configuration: ## Tomcat Jakarta connector configuration# see http://tomcat.apache.org/connectors-doc for more info## Load mod_jk moduleLoadModule jk_module modules/mod_jk.so# Where to find workers.propertiesJkWorkersFile /etc/httpd/conf/workers.properties# Where to put jk logsJkLogFile /var/log/httpd/mod_jk.log# Set the jk log level [debug/error/info]JkLogLevel debug# Select the log formatJkLogStampFormat "[%a %b %d %H:%M:%S %Y] "# JkOptions indicate to send SSL KEY SIZE,JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories# JkRequestLogFormat set the request formatJkRequestLogFormat "%w %V %T"# jasperserver-pro mount pointsJkMount /jasperserver-pro worker1JkMount /jasperserver-pro/* worker1[/code]Be sure the server names for JkMount match your server name. Create /etc/httpd/conf/workers.properties and add the following configuration: ## begin workers.properties# Define 1 real worker using ajp13worker.list=worker1# Set properties for worker1 (ajp13)worker.worker1.type=ajp13worker.worker1.host=localhostworker.worker1.port=8009worker.worker1.lbfactor=50worker.worker1.cachesize=10worker.worker1.cache_timeout=600worker.worker1.socket_keepalive=1worker.worker1.recycle_timeout=300# end workers.properties[/code]Enable the httpd worker service, start the web server and test it's status. At the command line type: [root@fed1764-csauto mod_jk]# systemctl enable httpd-worker.service[root@fed1764-csauto mod_jk]# service httpd-worker start[root@fed1764-csauto mod_jk]# service httpd-worker status[/code]Make sure that the Jasperserver application is started, then go to http://<hostname>/jasperser-pro in your browser to validate that you can reach the application via the web server on port 80. Install and Configure the Secure ServerFirst create a self-signed SSL certificate. [root@fed1764-csauto mod_jk]# cd /etc/pki/tls/certs[root@fed1764-csauto mod_jk]# make server.key[/code]umask 77 ; /usr/bin/openssl genrsa -aes128 2048 > server.key Generating RSA private key, 1024 bit long modulus .........................................................++++++ ........++++++ e is 65537 (0x10001) Enter PEM pass phrase: Verifying password - Enter PEM pass phrase: Enter anything for the pass phrase – many people use “secret,” remember it, you will need it in the next step. Remove passphrase from private key. [root@fed1764-csauto mod_jk]# openssl rsa -in server.key -out server.key[/code]Enter pass phrase for server.key: writing RSA key Generate the certificate signing request (CSR).[root@fed1764-csauto mod_jk]# make server.csr[/code]umask 77 ; /usr/bin/openssl req -utf8 -new -key server.key -out server.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [GB]:US State or Province Name (full name) [berkshire]:California Locality Name (eg, city) [Newbury]:San Francisco Organization Name (eg, company) [My Company Ltd]:Jaspersoft Organizational Unit Name (eg, section) []:Engineering Common Name (eg, your name or your server's hostname) []:fed1764-csauto.jaspersoft.com Email Address []:engineering@jaspersoft.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Generate a temporary certificate which is good for 365 days. [root@fed1764-csauto mod_jk]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365[/code]Signature ok subject=/C=CH/ST=Bern/L=Oberdiessbach/O=Akadia AG/OU=Information Technology/CN=public.akadia.com/Email=martin dot zahn at akadia dot ch Getting Private key Finally, make all the the files read-only. [root@fed1764-csauto mod_jk]# chmod 400 server.*[/code]This completes the certificate creation. Install and Configure mod_ssl[root@fed1764-csauto mod_jk]# yum -y install mod_ssl[root@fed1764-csauto mod_jk]# vi /etc/httpd/conf.d/ssl.conf[/code]Open ssl.conf in a text editor. # line 78: uncomment DocumentRoot "/var/www/html" # line 79: uncomment and specify server name and port ServerName fed1764-csauto.jaspersoft.com:443 # Make a new line after line 79 and specify the JkMount JkMount /jasperserver-pro worker 1 JkMount /jasperserver-pro/* worker 1 # line 115: specify certificate SSLCertificateFile /etc/pki/tls/certs/server.crt # line 122: specify certificate key SSLCertificateKeyFile /etc/pki/tls/certs/server.key Finally, restart the web server and validate the SSL connection. [root@fed1764-csauto mod_jk]# systemctl restart httpd.service[/code]Go to https://<hostname>/jasperser-pro in a browser to validate the SSL connection. This completes the secure server configuration.
  20. IssueHibernate queries are logged to the jasperserver.log file using the following logger in log4j.properties. log4j.logger.org.hibernate.SQL=DEBUG This will log the Hibernate queries in the following manner, with question marks as place holders for bound parameters. select this_.id as id5_1_, this_.version as version5_1_, this_.uri as uri5_1_, this_.hidden as hidden5_1_, this_.name as name5_1_, this_.label as label5_1_, this_.description as descript7_5_1_, this_.parent_folder as parent8_5_1_, this_.creation_date as creation9_5_1_, this_.update_date as update10_5_1_, parent1_.id as id5_0_, parent1_.version as version5_0_, parent1_.uri as uri5_0_, parent1_.hidden as hidden5_0_, parent1_.name as name5_0_, parent1_.label as label5_0_, parent1_.description as descript7_5_0_, parent1_.parent_folder as parent8_5_0_, parent1_.creation_date as creation9_5_0_, parent1_.update_date as update10_5_0_ from JIResourceFolder this_ inner join JIResourceFolder parent1_ on this_.parent_folder=parent1_.id where parent1_.hidden=? and ((this_.uri like ? or this_.uri like ?) and not this_.uri like ?) But what if you also want to know the value of the parameters so that you can debug the sql statement? ResolutionAdd the following directives to log4j.properties. ### To log bound hibernate queries with their bound parameters log4j.logger.org.hibernate.SQL=DEBUG log4j.logger.org.hibernate.type=TRACE log4j.appender.hb=org.apache.log4j.ConsoleAppender log4j.appender.hb.layout=org.apache.log4j.PatternLayout This will log the following. select this_.id as id5_1_, this_.version as version5_1_, this_.uri as uri5_1_, this_.hidden as hidden5_1_, this_.name as name5_1_, this_.label as label5_1_, this_.description as descript7_5_1_, this_.parent_folder as parent8_5_1_, this_.creation_date as creation9_5_1_, this_.update_date as update10_5_1_, parent1_.id as id5_0_, parent1_.version as version5_0_, parent1_.uri as uri5_0_, parent1_.hidden as hidden5_0_, parent1_.name as name5_0_, parent1_.label as label5_0_, parent1_.description as descript7_5_0_, parent1_.parent_folder as parent8_5_0_, parent1_.creation_date as creation9_5_0_, parent1_.update_date as update10_5_0_ from JIResourceFolder this_ inner join JIResourceFolder parent1_ on this_.parent_folder=parent1_.id where parent1_.hidden=? and ((this_.uri like ? or this_.uri like ?) and not this_.uri like ?) 2014-03-25 15:53:06,127 TRACE BooleanType,localhost-startStop-1:151 - binding 'false' to parameter: 1 2014-03-25 15:53:06,128 TRACE StringType,localhost-startStop-1:151 - binding '/themes/default%' to parameter: 2 2014-03-25 15:53:06,128 TRACE StringType,localhost-startStop-1:151 - binding '/organizations/%/themes/default%' to parameter: 3 2014-03-25 15:53:06,129 TRACE StringType,localhost-startStop-1:151 - binding '%org_template%' to parameter: 4 2014-03-25 15:53:06,132 TRACE LongType,localhost-startStop-1:193 - returning '22' as column: id5_0_ 2014-03-25 15:53:06,133 TRACE LongType,localhost-startStop-1:193 - returning '39' as column: id5_1_ 2014-03-25 15:53:06,133 TRACE LongType,localhost-startStop-1:193 - returning '39' as column: id5_0_ 2014-03-25 15:53:06,134 TRACE LongType,localhost-startStop-1:193 - returning '75' as column: id5_1_ 2014-03-25 15:53:06,134 TRACE IntegerType,localhost-startStop-1:193 - returning '0' as column: version5_1_ ... In this sql statement there are four bound parameters and their values are now logged below the statement. Notice that the values of the selected columns are also logged (I printed only the first five for this example).
  21. Issue:Debug logging in the Jasper reports server is accomplished by enabling loggers for specific classes. This is done in two ways, either on the Manage->Server Settings->Log Settings page or in the jasperserver-pro/WEB-INF/log4j.properties file. However, in the Weblogic Application Server there appear to be class loading issues that prevent some classes from being logged. Resolution:Deep within the IBM documentation there is a section about Jakarta Commons Logging with a solution. 1) Create a folder called "services" in META-INF 2) Create a file called "org.apache.commons.logging.LogFactory" inside the META-INF/services directory 3) The content of the org.apache.commons.logging.LogFactory file should be org.apache.commons.logging.impl.Log4jFactory Enable the loggers that you want to log and restart the server.
  22. Time zone conversions are applied ONLY to fields of type Date time, Date time plus TimeZoneInfo, Time, and Time plus TimeZoneInfo. Setting the Time Zone in the Data SourceThe time zone can be set in the data source using the Time Zone drop-down menu. The default value is "Use database setting." With this setting the server will use the exact value of the time in the database using the time zone set in the database. Setting the time zone in the data source should only be used when you know that dates in database are incorrect (for example, for some reason all dates are shifted by +/-n hours). If a new time zone is selected from the drop-down menu in the data source then the time from the database will be converted to the new time zone. For example, let's say the database time is 3/3 3:49 PM PST. If the database time zone is set to Pacific Standart Time (PST) and the time zone setting in the data source is set to Eastern European Time (EET) then the value from the database will be converted to 3/4 1:49 AM PST, 10 hours before (PST is GMT+8, EET is GMT-2). Setting the Time Zone On the Login PageSetting the time on the login page will modify whatever is returned from the data source. For example, as can be seen in the table below, when the data source time zone and the login time zone are both PST the time displayed is same as that in the database. When the login time zone is EST the time displayed is three hours earlier than the data source time. If the login page time zone is EET then the time displayed this 10 hours before the database time. As the last row in the table shows the login page time zone modifies whatever is returned from the data source, so if the data source time zone is EST and login time zone is EET then the time displayed will be seven hours before the database time. Time Zone ConversionsDatabase Time ZoneLogin Page Time ZoneDate/TimeGMT OffsetPSTPST3/3 3:49 PMGMT+8PSTEST3/3 6:49 PMGMT+5PSTEET3/4 1:49 AMGMT-2ESTEET3/3 10:49 PMGMT+3
  23. IntroductionAn article was written in 2009 for version 3.x on this subject and was updated for version 4.x in 2011. With the release of version 5.5 the home page was completely changed, so the previous solution no longer works. Role-based login directs the users to a specific home page depending on their role in an organization. SolutionOpen WEB-INF/jsp/home/home.jsp and modify it according to the following example. The logic of the jsp will display the first page configured for the user. This means that if a user has 2 roles that are configured to have a custom page he'll not face issues caused by the double include. <%@ page contentType="text/html" %> <%@ taglib uri="/spring" prefix="spring"%> <%@ taglib uri="http://www.springframework.org/security/tags" prefix="authz"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Default Home page --%> <c:set var="homePageRequested">homeForNonDemo.jsp</c:set> <authz:authorize ifAllGranted="ROLE_DEMO"> <%-- We have special home page for demo user only on PostgreSQL db. For other DB's it have same home page as other users. --%> <c:if test="${demoHomeResourceExists}"> <c:set var="homePageRequested">homeForDemo.jsp</c:set> </c:if> </authz:authorize> <authz:authorize ifAllGranted="ROLE_DASHBOARD"> <c:set var="homePageRequested">homeForDashboard.jsp</c:set> </authz:authorize> <authz:authorize ifAllGranted="ROLE_HPC_ADMIN"> <c:set var="homePageRequested">homeForHpcAdmin.jsp</c:set> </authz:authorize> <jsp:include page="${homePageRequested}"/>
  24. IntroductionThere are many times when using native Linux/Unix tools can be very useful for analzing performance issues, especially high CPU or server hangs. This article discusses several tools executed in the two attached shell scripts, linmon.sh and linperf.sh. The scripts came from an IBM support site and are part of their standard information gathering process (https://www-304.ibm.com/support/docview.wss?uid=swg21115785#show-hide). The purpose of this article is to explain what the native tools in these scripts do and how you can use them to help troubleshoot performance issues on your server. The ScriptsBoth scripts use some of the same native tools but have different purposes. The attached zip file includes them. linmon.shLinmon.sh is used to monitor your system for an extended period of time to alert you when a problem will occur. It runs for one day by default and collects metris every five minutes. It uses the ps and vmstat commands to monitor process size and CPU and paging usage (we'll discuss these in detail later in this article). When these metrics rise to a certain level it is a signal that an event is imminent, so then it's time to run linperf.sh. It writes two files, ps_mon.out and vmstat_mon.out. These files are likely to get pretty large after a day, so they should be deleted or roatated daily if you run the scripts for multiple days. linperf.shThis script is meant to capture metrics just before and/or during an event. It also uses the ps and vmstat commands but also includes whoami, top with two different parameters, and creates java thread dumps. The Native ToolsProcess Status - ps -eLfps is the standard command to list processes and is most often used to find a process id (pid), as "ps -ef | grep java," to find the pid of a running application server. The L flag tells it to list all threads and adds two columns, LWP and NLWP. LWP, or Light Weight Process is the process number, NLWP is the number of threads running for that process. Search for the process id of the running JVM process to find the number of threads associated with it. (formatted for legibility)UID PID PPID LWP C NLWP STIME TTY TIME CMDroot 2956 1 2956 0 115 Jan21 ? 00:00:00 /opt/IBM/WebSphere/AppServer/java/bin/java -Declipse.security -Dwas.status.socket=52485 -Dosgi.install.area=/opt/IBM/WebSphere/AppServer -Dosgi.configuration.area=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/servers/server1/configuration -Djava.awt.headless=true -Dosgi.framework.extensions=com.ibm.cds,com.ibm.ws.eclipse.adaptors -Xshareclasses:name=webspherev85_1.6_32_%g,nonFatal -Dcom.ibm.xtq.processor.overrideSecureProcessing=true -Xbootclasspath/p:/opt/IBM/WebSphere/AppServer/java/jre/lib/ibmorb.jar -classpath /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/properties :/opt/IBM/WebSphere/AppServer/properties :/opt/IBM/WebSphere/AppServer/lib/startup.jar :/opt/IBM/WebSphere/AppServer/lib/bootstrap.jar :/opt/IBM/WebSphere/AppServer/lib/jsf-nls.jar :/opt/IBM/WebSphere/AppServer/lib/lmproxy.jar :/opt/IBM/WebSphere/AppServer/lib/urlprotocols.jar :/opt/IBM/WebSphere/AppServer/deploytool/itp/batchboot.jar :/opt/IBM/WebSphere/AppServer/deploytool/itp/batch2.jar :/opt/IBM/WebSphere/AppServer/java/lib/tools.jar -Dibm.websphere.internalClassAccessMode=allow -Xms50m -Xmx256m -Xscmaxaot4M -Xscmx60M -Dws.ext.dirs=/opt/IBM/WebSphere/AppServer/java/lib :/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/classes :/opt/IBM/WebSphere/AppServer/classes:/opt/IBM/WebSphere/AppServer/lib :/opt/IBM/WebSphere/AppServer/installedChannels :/opt/IBM/WebSphere/AppServer/lib/ext :/opt/IBM/WebSphere/AppServer/web/help :/opt/IBM/WebSphere/AppServer/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime -Dderby.system.home=/opt/IBM/WebSphere/AppServer/derby -Dcom.ibm.itp.location=/opt/IBM/WebSphere/AppServer/bin -Djava.util.logging.configureByServer=true -Duser.install.root=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01 -Djava.ext.dirs=/opt/IBM/WebSphere/AppServer/tivoli/tam :/opt/IBM/WebSphere/AppServer/java/jre/lib/ext -Djavax.management.builder.initial=com.ibm.ws.management.PlatformMBeanServerBuilder -Dpython.cachedir=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/temp/cachedir -Dwas.install.root=/opt/IBM/WebSphere/AppServer -Djava.util.logging.manager=com.ibm.ws.bootstrap.WsLogManager -Dserver.root=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01 -Dcom.ibm.security.jgss.debug=off -Dcom.ibm.security.krb5.Krb5Debug=off -Djava.library.path=/opt/IBM/WebSphere/AppServer/lib/native/linux/x86_32/ :/opt/IBM/WebSphere/AppServer/java/jre/lib/i386/default :/opt/IBM/WebSphere/AppServer/java/jre/lib/i386 :/opt/IBM/WebSphere/AppServer/bin :/opt/IBM/WebSphere/AppServer/nulldllsdir :/usr/lib: -Djava.endorsed.dirs=/opt/IBM/WebSphere/AppServer/endorsed_apis :/opt/IBM/WebSphere/AppServer/java/jre/lib/endorsed -Djava.security.auth.login.config=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/properties/wsjaas.conf -Djava.security.policy=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/properties/server.policy com.ibm.wsspi.bootstrap.WSPreLauncher -nosplash -application com.ibm.ws.bootstrap.WSLauncher com.ibm.ws.runtime.WsServer /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/config nullNode01Cell nullNode01 server1[/code]The number of processes for pid 2956 is 115. If this number reaches the total number of threads allocated for this application it means thread starvation has occurred. To find out what is holding these threads you must analyze the thread dumps contained in the javacore files. Most often this occurs because of a memory leak. vmstat 5 12This will run vmstat with a 5 second delay between iterations for 12 iterations. Here is a summary of the fields: Procsr: The number of processes waiting for run time.b: The number of processes in uninterruptible sleep.Memoryswpd: the amount of virtual memory used.free: the amount of idle memory.buff: the amount of memory used as buffers.cache: the amount of memory used as cache.inact: the amount of inactive memory. (-a option)active: the amount of active memory. (-a option)Swapsi: Amount of memory swapped in from disk (/s).so: Amount of memory swapped to disk (/s).IObi: Blocks received from a block device (blocks/s).bo: Blocks sent to a block device (blocks/s).Systemin: The number of interrupts per second, including the clock.cs: The number of context switches per second.CPUus: Time spent running non-kernel code. (user time, including nice time)sy: Time spent running kernel code. (system time)id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st1 2 0 6911696 175108 636960 0 0 0 1 13 15 0 0 100 0 00 0 0 6907868 175136 640272 0 0 201 488 302 1786 1 1 98 0 00 0 0 6907884 175136 640280 0 0 0 18 127 204 0 0 100 0 00 0 0 6908008 175136 640292 0 0 0 9 129 209 0 0 100 0 00 0 0 6908008 175136 640304 0 0 0 10 128 199 0 0 100 0 00 0 0 6908008 175136 640312 0 0 0 33 143 204 0 0 100 0 01 0 0 6907884 175140 640324 0 0 0 11 134 212 0 0 100 0 00 0 0 6907884 175140 640332 0 0 0 11 150 248 0 0 100 0 00 0 0 6907356 175140 640348 0 0 0 10 176 293 0 0 100 0 00 0 0 6906628 175140 640356 0 0 0 13 247 244 0 1 99 0 00 0 0 6906628 175140 640364 0 0 0 18 209 245 0 1 99 0 00 0 0 6906628 175140 640380 0 0 0 10 126 207 0 0 100 0 01 0 0 6906496 175140 640388 0 0 0 19 204 226 2 0 98 0 01 0 0 6906504 175140 640420 0 0 0 14 139 207 0 0 100 0 00 0 0 6906504 175140 640428 0 0 0 11 133 201 0 0 100 0 00 0 0 6906496 175140 640436 0 0 0 10 136 212 0 0 100 0 00 0 0 6906504 175140 640448 0 0 0 9 133 201 0 0 100 0 00 0 0 6906008 175140 640456 0 0 0 10 145 203 0 0 99 0 01 0 0 6906008 175140 640468 0 0 0 14 132 208 0 0 100 0 00 0 0 6906008 175140 640480 0 0 0 14 130 201 0 0 100 0 00 0 0 6906016 175140 640488 0 0 0 11 137 209 0 0 100 0 0[/code]Since this server in this example is idle the CPU utilization is mostly 100% idle, but if the CPU is running at 95% or above for extended periods of time the application performance is no doubt poor and you must search for a reason. The other interesting metrics are swap in and out (the si and so columns). If it is swapping memory to disk at a high rate you are approaching or have reached the limits of system memory and performance will suffer. kill -3This command produces a java thread dump containing the state of all threads in the JVM at the time of the dump. In the Oracle/Sun JDK the thread dumps are written to stout, so you will find them written to the application server log file. The IBM JDK produces javacore files. The location of the javacore files depends on the OS, to find them use "find / -name *javacore*." whoamiThis is simply the user who is running the script. [root@infra-was8-forgh ~]# whoamiroot[root@infra-was8-forgh ~]#[/code]top -bc -d 60 -n 5Top displays a listing of the most CPU-intensive tasks on the system. The b flag puts it into batch mode to facilitate writing the output to disk. The c flag tells it to display the full command line for each process instead of just the program name. The d flag tells it to delay 60 seconds between refreshes and the n flag tells it to stop after five refreshes. top - 14:54:08 up 7 days, 3:42, 2 users, load average: 0.00, 0.01, 0.00Tasks: 250 total, 1 running, 249 sleeping, 0 stopped, 0 zombieCpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 8313644k total, 1405676k used, 6907968k free, 175136k buffersSwap: 16383992k total, 0k used, 16383992k free, 640004k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2956 root 20 0 466m 215m 62m S 19.6 2.7 13:39.16 /opt/IBM/WebSphere/30375 root 20 0 2672 1084 768 R 2.0 0.0 0:00.01 top -bc -d 60 -n 5 1 root 20 0 2852 1424 1208 S 0.0 0.0 0:04.07 /sbin/init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kthreadd] 3 root RT 0 0 0 0 S 0.0 0.0 0:00.03 [migration/0] 4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [ksoftirqd/0][/code]top -bH -d 5 -n 49 -p 2956Here the p flag tells top to show only process 2956 (the app server process). The H flag tells it to show all threads associated with pid 2956. top - 15:46:23 up 10 days, 4:35, 2 users, load average: 0.01, 0.02, 0.00Tasks: 114 total, 0 running, 114 sleeping, 0 stopped, 0 zombieCpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 8313644k total, 2819832k used, 5493812k free, 266804k buffersSwap: 16383992k total, 0k used, 16383992k free, 1824068k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND2956 root 20 0 466m 216m 62m S 0.0 2.7 0:00.00 java2957 root 20 0 466m 216m 62m S 0.0 2.7 0:15.31 P=557864:O=0:CT2958 root 20 0 466m 216m 62m S 0.0 2.7 0:00.23 Signal Reporter2960 root 20 0 466m 216m 62m S 0.0 2.7 0:08.43 JIT Compilation2961 root 20 0 466m 216m 62m S 0.0 2.7 0:04.35 JIT Compilation2962 root 20 0 466m 216m 62m S 0.0 2.7 0:00.00 JIT Compilation2963 root 20 0 466m 216m 62m S 0.0 2.7 1:20.71 JIT Sampler2964 root 20 0 466m 216m 62m S 0.0 2.7 0:05.58 JIT IProfiler2965 root 20 0 466m 216m 62m S 0.0 2.7 0:00.00 Signal Dispatch2966 root 20 0 466m 216m 62m S 0.0 2.7 0:00.12 Finalizer maste2967 root 20 0 466m 216m 62m S 0.0 2.7 0:34.41 Concurrent Mark2968 root 20 0 466m 216m 62m S 0.0 2.7 0:09.31 GC Slave2969 root 20 0 466m 216m 62m S 0.0 2.7 0:09.36 GC Slave2970 root 20 0 466m 216m 62m S 0.0 2.7 0:09.28 GC Slave2973 root 20 0 466m 216m 62m S 0.0 2.7 0:08.57 Thread-8[/code]
×
×
  • Create New...