Hướng dẫn này tập trung vào việc tinh chỉnh và tối giản hóa JBoss Application Server. Hai khái niệm này thường độc lập với nhau. Giảm bớt các luồng dịch vụ nhàn rỗi thông qua việc tinh gọn có thể không ảnh hưởng nhiều đến hiệu suất, nhưng việc sử dụng ít tài nguyên hơn có thể cho phép bạn tinh chỉnh các khía cạnh hiệu suất khác. Tất nhiên, điều này làm giảm thời gian khởi động. Ngoài ra, như một nguyên tắc bảo mật chung - hãy loại bỏ các dịch vụ bạn không sử dụng. Chúng ta sẽ phân tách hai loại: tinh gọn và tinh chỉnh.
Chúng tôi bắt đầu bằng cách sử dụng cấu hình mặc định và cắt giảm từ đó. Hướng dẫn này không bao gồm các khu vực tinh chỉnh yêu cầu cả vai trò nhà phát triển và quản trị viên (ví dụ: tinh chỉnh ứng dụng như kích thước bộ đệm). Đây chủ yếu là lời khuyên cho việc tinh chỉnh quản trị.
Lưu ý cho những ai lo ngại rằng hướng dẫn này sẽ tạo ra một phiên bản JBoss không tuân thủ J2EE về mặt kỹ thuật (phiên bản 3.2.6 vốn đã không tuân thủ): Việc loại bỏ các dịch vụ J2EE quan trọng sẽ khiến JBoss thất bại trong bài kiểm tra TCK. Hầu hết các tác vụ tinh chỉnh hiệu suất/quản trị được thực hiện trong các cài đặt thực tế đều thuộc loại này.
Giả sử bạn đã sao chép thư mục server/default và các thư mục con của nó sang server/slim.
Tinh chỉnh (Tuning)
Máy ảo Java (JVM)
- Tinh chỉnh Bộ thu gom rác hoặc Tinh chỉnh Bộ thu gom rác JDK 5 cho máy và kích thước bộ nhớ của bạn.
- Sử dụng máy 64-bit và VM 64-bit để bạn có thể sử dụng kích thước heap lớn, thường lớn hơn 2-4GB. Hỗ trợ 64-bit có sẵn trên tất cả các máy SPARC/Solaris gần đây chạy Solaris 9 trở lên, Itanium với JDK 1.4 hoặc JDK 5 trên Linux x64.
- KHÔNG SỬ DỤNG
-d64(64-bit) nếu bạn không sử dụng heap vượt quá giới hạn tối đa của 32-bit (2-4 GB). Việc sử dụng địa chỉ 64-bit đòi hỏi nhiều bộ nhớ hơn để thực hiện cùng một công việc và không mang lại lợi thế cho các ứng dụng không cần nhiều bộ nhớ như vậy. - Tránh các heap quá lớn nhưng cũng tránh các heap quá nhỏ. Kích thước heap ảnh hưởng đến bộ thu gom rác thế hệ và tổng thời gian quét heap. Việc tinh chỉnh một heap nhỏ một cách hiệu quả là khó khăn (ngay cả khi ứng dụng của bạn chỉ sử dụng 200MB, nếu bạn sử dụng bộ thu gom rác song song + CMS, bạn sẽ cần hơn 512MB). Các heap quá lớn tốn thời gian quét bộ nhớ không cần thiết cho việc thu gom rác.
- Tránh sử dụng Sun 1.4 VM. JDK 5 tốt hơn RẤT NHIỀU, đặc biệt là về bộ thu gom rác.
- Sử dụng tùy chọn
-servernhưng sử dụng một trong hai tùy chọn:-XX:ThreadStackSize=128k(Solaris) hoặc-Xss128k(các nền tảng khác). Trên Solaris,-Xss128kkhông có tác dụng (bạn chỉ có thể đặt kích thước stack luồng LỚN HƠN). Điều này cho phép bạn tạo nhiều luồng hơn bằng cách sử dụng ít bộ nhớ hơn cho mỗi luồng nhưng có thể gây ra lỗi tràn stack với mã đệ quy cực kỳ sâu. Tuy nhiên, stack 128k vẫn không phải là nhỏ. - Bạn thực sự cần hiểu về các bộ thu gom rác thế hệ để tinh chỉnh chính xác và bạn thực sự phải thực hiện kiểm thử tải (OpenSTA, JMeter, v.v.) để biết chắc chắn.
- Bạn thực sự nên sử dụng máy đa bộ xử lý có nhiều hơn 2 bộ xử lý và sử dụng các tùy chọn bộ thu gom rác song song và đồng thời khác nhau (chúng tôi đề cập đến điều này trong Đào tạo JBoss nâng cao) để đạt hiệu suất tối đa và thông lượng bộ thu gom rác cao. Tuy nhiên, bạn thực sự cần hiểu cách thức hoạt động của bộ thu gom rác để tinh chỉnh tốt. JDK 5 chủ yếu tự tinh chỉnh.
NewSizemặc định của JDK 1.4 không phải là một ước tính tốt. Quy tắc ngón tay cái tệ: nhỏ hơn 20% là mộtNewSizetốt. Lớn hơn 20% là nguy hiểm do một lỗi khó chịu trong JDK có thể khiến nó liên tục chạy tất cả các bộ thu gom rác đầy đủ và không bao giờ tạm dừng hoặc giải phóng đủ bộ nhớ. JDK 5 dường như không gặp lỗi này và có vẻ chọn các giá trị mặc định hợp lý hơn.
JBoss/Java trên Linux
Nếu bạn đang chạy JBoss AS trên máy chủ Linux, bạn nên đọc bài viết này của Andrew Oliver, một trong những chuyên gia tư vấn của JBoss, thuộc Red Hat, về cách tinh chỉnh JBoss/Java trên máy chủ Linux.
Tomcat
- Chỉnh sửa tệp
server/slim/jbossweb-tomcat5?.sar/server.xml. - Kiểm tra tài liệu XML cho các trình kết nối bạn đang sử dụng. Ví dụ: trình kết nối HTTP:
<Connector port="8080" address="${jboss.bind.address}" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"></Connector> - Bạn nên có đủ luồng (
maxThreads) để xử lý (quy tắc ngón tay cái) 25% nhiều hơn tải tối đa dự kiến của bạn (lượt truy cập đồng thời). minSpareThreadsnên là một chút nhiều hơn tải bình thường của bạn.maxSpareThreadsnên là một chút nhiều hơn tải đỉnh của bạn.minSpareThreadscó nghĩa là "khi khởi động, luôn giữ ít nhất số luồng này chờ rảnh rỗi".maxSpareThreadscó nghĩa là "nếu chúng ta vượt quá minSpareThreads, hãy luôn giữ maxSpareThreads chờ rảnh rỗi".- Loại bỏ bất kỳ
valvevà ghi nhật ký không cần thiết nào. Nếu bạn không sử dụng bảo mật của JBoss, hãy loại bỏsecurity valve(xem bên dưới). - Biên dịch trước JSP. (Trình biên dịch tích hợp khá nhanh, có thể không đáng giá cho các trang web nhỏ.)
- Tắt chế độ "development" trong
server/slim/jbossweb-tomcat50.sar/conf/web.xml.
Đối với JBoss 4.0.5:
Để vô hiệu hóa chế độ phát triển trong Tomcat:
Chỉnh sửa tệp $JBOSS_HOME/server/slim/deploy/jbossweb-tomcat55.sar/conf/web.xml và tìm servlet jsp:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
...
</servlet>
Thêm:
<init-param>
<param-name>development</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>checkInterval</param-name>
<param-value>300</param-value>
</init-param>
RMI cho các Gọi từ xa
Mặc định, JBoss tạo một luồng mới cho mỗi yêu cầu RMI đến. Điều này thường không hiệu quả trên một hệ thống lớn. Thứ hai, nó có thể nguy hiểm nếu cho phép các kết nối không hạn chế trong trường hợp có sự đột biến hiệu suất hoặc lưu lượng truy cập hoặc các máy khách tạo kết nối mất kiểm soát. Để khắc phục điều này, bạn nên xem xét chuyển sang pooled invoker.
- Chỉnh sửa
server/slim/conf/standardjboss.xml. - Thay đổi tất cả các
proxy bindingthànhpooled invokerbằng cách thay đổi mọi đoạn XML đọc:<invoker-mbean>jboss:service=invoker,type=jrmp</invoker-mbean>
thành<invoker-mbean>jboss:service=invoker,type=pooled</invoker-mbean>
JBoss cũng có một PooledInvokerHA hầu như không được ghi lại mà bạn có thể thử.
Log4j
Việc ghi nhật ký có ảnh hưởng sâu sắc đến hiệu suất. Thay đổi mức nhật ký thành TRACE có thể làm JBoss AS chậm lại đáng kể. Thay đổi nó thành ERROR (hoặc WARN) có thể tăng tốc đáng kể.
- Mặc định, JBoss ghi nhật ký cả vào bảng điều khiển (console) và
server.log, và mặc định sử dụng mứcINFO. - Cân nhắc không ghi nhật ký vào
System.out(bạn vẫn có thể muốn chuyển hướng nó để bắt lỗi JVM). - Cân nhắc thay đổi mức nhật ký thành
ERROR. Hãy nhớ rằng JBoss theo dõi tệp cấu hình log4j của nó để phát hiện thay đổi và bạn luôn có thể thay đổi cấu hình trong thời gian chạy. - Thêm bộ lọc danh mục (category filter) cho hệ thống phân cấp lớp Java của bạn.
Để tắt ghi nhật ký bảng điều khiển:
- Chỉnh sửa
server/slim/conf/log4j.xml. - Thay đổi đoạn XML sau:
<root> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root>thành<root> <appender-ref ref="FILE"/> </root> - Sau đó, bạn có thể xóa đoạn này:
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="Target" value="System.out"/> <param name="Threshold" value="INFO"/> <layout class="org.apache.log4j.PatternLayout"> <!-- The default pattern: Date Priority [Category] Message\n --> <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/> </layout> </appender>
Để thay đổi mức nhật ký:
- Chỉnh sửa
server/slim/conf/log4j.xml. - Xóa/bình luận các đoạn XML sau:
<category name="org.apache"> <priority value="INFO"/> </category> <!-- Limit org.jgroups category to INFO --> <category name="org.jgroups"> <priority value="INFO"/> </category> - Thay đổi danh mục gốc bằng cách thay đổi đoạn XML sau:
<root> <appender-ref ref="CONSOLE"/> <!-- you may have removed this earlier --> <appender-ref ref="FILE"/> </root>thành<root> <priority value="ERROR"></priority> <appender-ref ref="CONSOLE"/> <!-- you may have removed this earlier --> <appender-ref ref="FILE"/> </root> - Và cuối cùng, có lẽ là điều quan trọng nhất trong log4j, hãy đảm bảo bạn giới hạn cấp độ ghi nhật ký trên hệ thống phân cấp lớp của riêng bạn. Điều này giả định rằng bạn đang sử dụng log4j theo đúng mục đích và không ghi mọi thứ vào
System.out. Điều này sẽ giảm đáng kể chi phí của log4j và cho phép bạn tận hưởng đầy đủ lợi ích của các lệnh gọi nhưif (log.isDebugEnabled())...
. Nếu bạn không làm điều này, tất cả việc ghi nhật ký trong mã của bạn sẽ được định dạng và chuyển đếnappender, và ngưỡng trênappendersẽ loại bỏ các thông báo nhật ký. Điều này có thể tạo ra một lượng rác đáng kể. Giả sử gói Java của bạn bắt đầu bằng "a.b", hãy thêm một cái gì đó như sau vào log4j.xml:<!-- Limit a.b category to INFO --> <category name="a.b"> <priority value="INFO"/> </category>Điều này có thể được thêm vào cùng khu vực nơi bạn tìm thấy các bộ lọc danh mục choorg.apachevàorg.jboss(xem ở trên).
Deployment Scanner
Deployment scanner quét mỗi 5 giây sẽ tiêu tốn chu kỳ xử lý, đặc biệt là trên các hệ thống có hệ thống tệp chậm (ví dụ: NTFS). Xem phần tinh gọn bên dưới về cách tắt khoảng thời gian quét hoặc làm cho nó xảy ra ít thường xuyên hơn.
Stateless Session Beans
EJB 1.x-2.x stateless session beans hoạt động với một mô hình nhóm không được khuyến nghị (bắt buộc theo đặc tả). Nếu bạn thấy rằng mình cần nhiều hơn giá trị mặc định (10) phiên bản, hãy xem xét đặt kích thước nhóm tối thiểu:
- Chỉnh sửa
server/slim/conf/standardjboss.xml. - Cuộn xuống phần:
<container-configuration> <container-name>Standard Stateless SessionBean</container-name> <call-logging>false</call-logging> <invoker-proxy-binding-name>stateless-rmi-invoker</invoker-proxy-binding-name> <container-interceptors> ...
- Tìm phần:
<container-pool-conf> <MaximumSize>100</MaximumSize> </container-pool-conf> </container-configuration>
- Thay đổi nó thành:
<container-pool-conf> <MinimumSize>100</MinimumSize> <MaximumSize>100</MaximumSize> <strictMaximumSize></strictMaximumSize> <strictTimeout>30000</strictTimeout> </container-pool-conf> </container-configuration>
Trong hầu hết các trường hợp, môi trường máy chủ không muốn các nhóm này tăng và giảm (vì nó gây ra phân mảnh bộ nhớ và điều đó còn tệ hơn việc sử dụng heap tiềm ẩn). Từ góc độ hiệu suất, số lượng phiên bản nên đủ lớn để phục vụ tất cả các yêu cầu của bạn mà không bị chặn.
Tinh chỉnh CMP
- Đọc cái này: http://www.artima.com/forums/flat.jsp?forum=141&thread=24532
- Và cái này: http://www.onjava.com/pub/a/onjava/2003/05/28/jboss_optimization.html
- Bây giờ hãy bỏ CMP và sử dụng JBossHibernate thay thế.
Connection Pools
- Không sử dụng phiên bản XA trừ khi bạn thực sự biết mình cần chúng. Kết nối XA không có hiệu suất tốt.
- Sử dụng hỗ trợ "ping" dành riêng cho cơ sở dữ liệu khi có sẵn cho "kiểm tra kết nối" hoặc sử dụng hỗ trợ chuyển đổi dự phòng trình điều khiển dành riêng cho cơ sở dữ liệu thay vì kiểm tra kết nối. (Hãy nhớ rằng không phải tất cả các tùy chọn tinh chỉnh có thể khả thi trong môi trường của bạn, chúng tôi đang nói về tối ưu hóa).
Tinh gọn (Slimming)
Khi không sử dụng mail-service (Chuẩn J2EE JavaMail client)
- Xóa
server/slim/deploy/mail-service.xml. - Xóa
server/slim/lib/mail(mail-plugin.jar,mail.jar- JavaMail). - Xóa
server/slim/lib/activation.jar(Java Activation Framework được JavaMail sử dụng).
Khi không sử dụng dịch vụ hủy lệ bộ đệm (cache invalidation service) (thường dùng cho các bean CMP Option A với Cache Invalidation, thường trong cấu hình cluster)
- Xóa
server/slim/deloy/cache-invalidation-service.xml.
Khi không sử dụng dịch vụ J2EE client deployer (đây là một dịch vụ bắt buộc theo spec J2EE không hữu ích lắm cho mô tả EAR application-client.xml)
- Xóa
server/slim/deploy/client-deployer-service.xml.
Khi không sử dụng các dịch vụ HAR deployer và Hibernate session management tích hợp
- Xóa
server/slim/deploy/hibernate-deployer-service.xml(Hỗ trợ HAR). - Xóa
server/slim/lib/jboss-hibernate.jar(Hỗ trợ HAR). - Xóa
server/slim/lib/hibernate2.jar(Hibernate). - Xóa
server/slim/lib/cglib-full-2.0.1.jar(được Hibernate sử dụng để tạo proxy của POJO). - Xóa
server/slim/lib/odmg-3.0.jar(một thứ gì đó về ánh xạ đối tượng-quan hệ được Hibernate sử dụng từ một ủy ban nào đó http://www.service-architecture.com/database/articles/odmg_3_0.html).
Đối với JBoss 4.0.5:
- Xóa
server/slim/lib/jboss-hibernate.jar. - Xóa
server/slim/lib/hibernate3.jar. - Xóa
server/slim/lib/cglib.jar.
Khi không sử dụng Hypersonic (bạn không nên sử dụng trong môi trường production)
Lưu ý rằng JBossMQ được triển khai trong cấu hình mặc định sử dụng DefaultDS với các ánh xạ cho Hypersonic. Xem các trang Wiki về Persistence JBoss MQ để biết thêm thông tin về cấu hình các lựa chọn thay thế khác.
- Xóa
server/slim/deploy/hsqldb-ds.xml. - Xóa
server/slim/lib/hsqldb-plugin.jar. - Xóa
server/slim/lib/hsqldb.jar.
Khi không sử dụng JBossMQ (máy chủ JMS của chúng tôi)
- Xóa toàn bộ thư mục
server/slim/deploy/jms. - Xóa
server/slim/lib/jbossmq.jar.
Khi không sử dụng HTTPInvoker (cho phép bạn đóng gói RMI qua HTTP)
- Xóa toàn bộ thư mục
server/slim/deploy/http-invoker.sar.
Khi không sử dụng XA datasources (Giao dịch phân tán và/hoặc có thể phục hồi)
- Xóa
server/slim/deploy/jboss-xa-jdbc.rar.
Nếu bạn không cần JMX-Console, hãy xóa nó
- Xóa
server/slim/deploy/jmx-console.war. - Nếu không, hãy bảo mật nó.
Nếu bạn không cần thực hiện các lệnh gọi JMX qua RMI (cảnh báo: shutdown.sh có làm điều này)
- Xóa
server/slim/deploy/jmx-invoker-adaptor-server.sar. - Xóa
server/slim/deploy/jmx-adaptor-plugin.jar. - Hoặc bạn có thể chỉ cần bảo mật
jmx invoker adaptor.
Nếu bạn không cần web-console
- Xóa
server/slim/deploy/management/web-console.war.
Nếu bạn không cần các phần mở rộng JSR-77 cho JMX
- Xóa
server/slim/deploy/management/console-mgr.sar.
Nếu bạn không cần cả web-console và phần mở rộng JSR-77
- Xóa toàn bộ thư mục
server/slim/deploy/management.
Nếu bạn không sử dụng cảnh báo giám sát bảng điều khiển/email
- Xóa
server/slim/deploy/monitoring-service.xml. - Xóa
server/slim/lib/jboss-monitoring.jar.
Nếu bạn không sử dụng trình chỉnh sửa thuộc tính phong phú (JMX) hoặc tải thuộc tính vào thuộc tính hệ thống thông qua Dịch vụ Thuộc tính
- Xóa
server/slim/deploy/properties-service.xml. - Xóa
server/slim/lib/properties-plugin.jar.
scheduler-service.xml là một ví dụ trừ khi bạn đã đặt cấu hình của riêng mình vào đó
- Xóa
server/slim/deploy/scheduler-service.xml.
Nếu bạn không sử dụng Trình quản lý Lập lịch JBoss (cho phép bạn lên lịch các lệnh gọi đối với MBean)
- Xóa
server/slim/deploy/schedule-manager-service.xml. - Xóa
server/slim/lib/scheduler-plugin(scheduler-plugin.jar,scheduler-plugin-example.jar).
Nếu bạn không cần xử lý ngoại lệ SQL dành riêng cho nhà cung cấp (tốt nhất là cứ để nó)
- Xóa
server/slim/deploy/sqlexception-service.xml.
Nếu bạn không sử dụng quản lý giao dịch phía máy khách hoặc kết nối được lưu vào bộ đệm (trong đó thay vì nhóm, chúng tôi lưu vào bộ đệm kết nối như trong trường hợp JAAS->DB User -- sử dụng điều này có nghĩa là bạn là người xấu và cần bị phạt)
- Xóa
server/slim/deploy/user-service.xml.
Nếu bạn không sử dụng tính năng tạo khóa UUID của JBoss (thường được sử dụng với khóa chính CMP, nhưng chúng tôi cũng có hỗ trợ dành riêng cho cơ sở dữ liệu)
- Xóa
server/slim/deploy/uuid-key-generator.sar. - Xóa
server/slim/lib/autonumber-plugin.jar.
user-service.xml là một ví dụ - trừ khi bạn đặt thứ gì đó vào đó (mbean của riêng bạn), bạn luôn có thể xóa nó.
- Xóa
server/slim/deploy/user-service.xml.
Nếu người dùng của bạn kết nối trực tiếp với Tomcat qua HTTP và không đi qua Apache/mod_jk:
- Mở
server/slim/deploy/jbossweb-tomcat50.sar/server.xmltrong trình soạn thảo vi. - Xóa/bình luận đoạn XML sau:
<!-- A AJP 1.3 Connector on port 8009 --> <Connector port="8009" address="${jboss.bind.address}" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3"></Connector>
Nếu người dùng của bạn không kết nối trực tiếp với Tomcat qua HTTP và luôn đi qua Apache/mod_jk
- Mở
server/slim/deploy/jbossweb-tomcat50.sar/server.xmltrong trình soạn thảo vi. - Xóa/bình luận đoạn XML sau:
<!-- A HTTP/1.1 Connector on port 8080 --> <Connector port="8080" address="${jboss.bind.address}" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"></Connector>
Nếu bạn không cần khả năng triển khai tệp EAR
- Mở
server/slim/conf/jboss-service.xmltrong trình soạn thảo vi. - Xóa/bình luận các đoạn XML sau từ dưới MBean
<mbean code="org.jboss.management.j2ee.LocalJBossServerDomain":<attribute name="EARDeployer">jboss.j2ee:service=EARDeployer</attribute>
và<!-- EAR deployer, remove if you are not using Web layers --> <mbean code="org.jboss.deployment.EARDeployer" name="jboss.j2ee:service=EARDeployer"> </mbean>
Nếu bạn không cần khả năng triển khai Hàng đợi JMS
- Mở
server/slim/conf/jboss-service.xmltrong trình soạn thảo vi. - Xóa/bình luận các đoạn XML sau từ dưới MBean
<mbean code="org.jboss.management.j2ee.LocalJBossServerDomain":<attribute name="JMSService">jboss.mq:service=DestinationManager</attribute>
Nếu bạn không cần sử dụng CORBA/IIOP
- Xóa
server/slim/deploy/iiop-service.xml. - Xóa
server/slim/lib/jacorb.jar. - Xóa
server/slim/conf/jacorb.properties. - Mở
server/slim/conf/jboss-service.xmltrong trình soạn thảo vi. - Xóa/bình luận các đoạn XML sau từ dưới MBean
<mbean code="org.jboss.management.j2ee.LocalJBossServerDomain":<attribute name="RMI_IIOPService">jboss:service=CorbaORB</attribute>
Nếu bạn đã xóa user-transaction-service.xml
- Mở
server/slim/conf/jboss-service.xmltrong trình soạn thảo vi. - Xóa/bình luận các đoạn XML sau từ dưới MBean
<mbean code="org.jboss.management.j2ee.LocalJBossServerDomain":<attribute name="UserTransactionService">jboss:service=ClientUserTransaction</attribute>
Nếu bạn không cần hỗ trợ JSR-77 (đã cố gắng làm cho JBoss, Weblogic và Websphere hỗ trợ một số giám sát JMX cơ bản tương tự) bạn có thể xóa/bình luận toàn bộ đoạn từ server/slim/conf/jboss-service.xml:
<!-- ==================================================================== -->
<!-- JSR-77 Single JBoss Server Management Domain -->
<!-- ==================================================================== -->
<mbean code="org.jboss.management.j2ee.LocalJBossServerDomain"
name="jboss.management.local:j2eeType=J2EEDomain,name=Manager">
<attribute name="MainDeployer">jboss.system:service=MainDeployer</attribute>
<attribute name="SARDeployer">jboss.system:service=ServiceDeployer</attribute>
<!-- <attribute name="EARDeployer">jboss.j2ee:service=EARDeployer</attribute>-->
<attribute name="EJBDeployer">jboss.ejb:service=EJBDeployer</attribute>
<attribute name="RARDeployer">jboss.jca:service=RARDeployer</attribute>
<attribute name="CMDeployer">jboss.jca:service=ConnectionFactoryDeployer</attribute>
<attribute name="WARDeployer">jboss.web:service=WebServer</attribute>
<attribute name="MailService">jboss:service=Mail</attribute>
<!-- <attribute name="JMSService">jboss.mq:service=DestinationManager</attribute>-->
<attribute name="JNDIService">jboss:service=Naming</attribute>
<attribute name="JTAService">jboss:service=TransactionManager</attribute>
<!-- <attribute name="UserTransactionService">jboss:service=ClientUserTransaction</attribute>
<attribute name="RMI_IIOPService">jboss:service=CorbaORB</attribute>-->
</mbean>
Nếu bạn không cần quản lý giao dịch phía máy khách (hãy nhớ rằng sử dụng cái này có nghĩa là bạn là người xấu)
- Mở
server/slim/conf/jboss-service.xmltrong trình soạn thảo vi. - Xóa/bình luận các đoạn XML sau:
<!-- | UserTransaction support. --> <mbean code="org.jboss.tm.usertx.server.ClientUserTransactionService" name="jboss:service=ClientUserTransaction" xmbean-dd="resource:xmdesc/ClientUserTransaction-xmbean.xml"> <depends> <mbean code="org.jboss.invocation.jrmp.server.JRMPProxyFactory" name="jboss:service=proxyFactory,target=ClientUserTransactionFactory"> <attribute name="InvokerName">jboss:service=invoker,type=jrmp</attribute> <attribute name="TargetName">jboss:service=ClientUserTransaction</attribute> <attribute name="JndiName">UserTransactionSessionFactory</attribute> <attribute name="ExportedInterface"> org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory </attribute> <attribute name="ClientInterceptors"> <interceptors> <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor> <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor> </interceptors> </attribute> <depends>jboss:service=invoker,type=jrmp</depends> </mbean> </depends> <depends optional-attribute-name="TxProxyName"> <mbean code="org.jboss.invocation.jrmp.server.JRMPProxyFactory" name="jboss:service=proxyFactory,target=ClientUserTransaction"> <attribute name="InvokerName">jboss:service=invoker,type=jrmp</attribute> <attribute name="TargetName">jboss:service=ClientUserTransaction</attribute> <attribute name="JndiName"></attribute> <attribute name="ExportedInterface"> org.jboss.tm.usertx.interfaces.UserTransactionSession </attribute> <attribute name="ClientInterceptors"> <interceptors> <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor> <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor> </interceptors> </attribute> <depends>jboss:service=invoker,type=jrmp</depends> </mbean> </depends> </mbean> - Bạn có thể xóa
server/slim/conf/xmdesc/ClientUserTransaction-xmbean.xmlvì nó không còn được tham chiếu nữa.
Nếu bạn không cần các thuộc tính MBean bền vững (mặc định không có JBoss MBean nào sử dụng điều này...cho đến nay)
- Mở
server/slim/conf/jboss-service.xmltrong trình soạn thảo vi. - Xóa/bình luận đoạn XML này:
<!-- ==================================================================== --> <!-- XMBean Persistence --> <!-- ==================================================================== --> <mbean code="org.jboss.system.pm.AttributePersistenceService" name="jboss:service=AttributePersistenceService" xmbean-dd="resource:xmdesc/AttributePersistenceService-xmbean.xml"> <attribute name="AttributePersistenceManagerClass"> org.jboss.system.pm.XMLAttributePersistenceManager </attribute> <attribute name="AttributePersistenceManagerConfig"> <data-directory>data/xmbean-attrs</data-directory> </attribute> <attribute name="ApmDestroyOnServiceStop">false</attribute> <attribute name="VersionTag"></attribute> </mbean> - Bạn cũng có thể xóa
server/slim/conf/xmdec/xmdesc/AttributePersistenceService-xmbean.xmlvì nó không còn được tham chiếu nữa.
Nếu bạn không sử dụng RMI Classloading (để tải mã từ máy khách bằng cách sử dụng các lớp trên máy chủ)
- Mở
server/slim/conf/jboss-service.xmltrong trình soạn thảo vi. - Xóa/bình luận đoạn XML này:
<!-- ==================================================================== --> <!-- JBoss RMI Classloader - only install when available --> <!-- ==================================================================== --> <mbean code="org.jboss.util.property.jmx.SystemPropertyClassValue" name="jboss.rmi:type=RMIClassLoader"> <attribute name="Property">java.rmi.server.RMIClassLoaderSpi</attribute> <attribute name="ClassName">org.jboss.system.JBossRMIClassLoader</attribute> </mbean>và<!-- ==================================================================== --> <!-- Class Loading --> <!-- ==================================================================== --> <mbean code="org.jboss.web.WebService" name="jboss:service=WebService"> <attribute name="Port">8083</attribute> <!-- Should resources and non-EJB classes be downloadable --> <attribute name="DownloadServerClasses">true</attribute> <attribute name="Host">${jboss.bind.address}</attribute> <attribute name="BindAddress">${jboss.bind.address}</attribute> </mbean> - Và thay đổi đoạn XML này (LƯU Ý: Trong JBoss 4.0, nó nằm trong tệp
server/slim/deploy/ejb-deployer.xml):<!-- EJB deployer, remove to disable EJB behavior--> <mbean code="org.jboss.ejb.EJBDeployer" name="jboss.ejb:service=EJBDeployer"> <attribute name="VerifyDeployments">true</attribute> ... <depends optional-attribute-name="WebServiceName">jboss:service=WebService</depends> </mbean>thành<!-- EJB deployer, remove to disable EJB behavior--> <mbean code="org.jboss.ejb.EJBDeployer" name="jboss.ejb:service=EJBDeployer"> <attribute name="VerifyDeployments">true</attribute> ... <!-- <depends optional-attribute-name="WebServiceName">jboss:service=WebService</depends> --> </mbean>Hoặc thay thế bằng cách xóa phần phụ thuộc/thuộc tínhWebServiceName.
Nếu bạn chỉ muốn sử dụng JBoss Naming cục bộ (không có máy khách RMI)
- Mở
server/slim/conf/jboss-service.xmltrong vi. - Thay đổi đoạn XML sau:
<!-- ==================================================================== --> <!-- JNDI --> <!-- ==================================================================== --> <mbean code="org.jboss.naming.NamingService" name="jboss:service=Naming" xmbean-dd="resource:xmdesc/NamingService-xmbean.xml"> ... <!-- The listening port for the bootstrap JNP service. Set this to -1 to run the NamingService without the JNP invoker listening port. --> <attribute name="Port">1099</attribute> ... <!-- The port of the RMI naming service, 0 == anonymous --> <attribute name="RmiPort">1098</attribute> ... </mbean>thành<!-- ==================================================================== --> <!-- JNDI --> <!-- ==================================================================== --> <mbean code="org.jboss.naming.NamingService" name="jboss:service=Naming" xmbean-dd="resource:xmdesc/NamingService-xmbean.xml"> ... <!-- The listening port for the bootstrap JNP service. Set this to -1 to run the NamingService without the JNP invoker listening port. --> <attribute name="Port">-1</attribute> ... <!-- The port of the RMI naming service, 0 == anonymous --> <attribute name="RmiPort">0</attribute> ... </mbean>
RmiPort là tùy chọn nhưng nó có nghĩa là chúng ta sẽ không ràng buộc cổng 1098, điều đó có thể hữu ích.
Bạn cũng có thể muốn xóa nhóm luồng được liên kết bằng cách xóa dòng sau khỏi cùng một khối XML:
<depends optional-attribute-name="LookupPool" proxy-type="attribute">jboss.system:service=ThreadPool</depends>và chính khối nhóm luồng:
<!-- A Thread pool service -->
<mbean code="org.jboss.util.threadpool.BasicThreadPool"
name="jboss.system:service=ThreadPool">
<attribute name="Name">JBoss System Threads</attribute>
<attribute name="ThreadGroupName">System Threads</attribute>
<attribute name="KeepAliveTime">60000</attribute>
<attribute name="MinimumPoolSize">1</attribute>
<attribute name="MaximumPoolSize">10</attribute>
<attribute name="MaximumQueueSize">1000</attribute>
<attribute name="BlockingMode">run</attribute>
</mbean>
MBean JNDIView (hiển thị cây đặt tên JNDI) rất hữu ích từ JMX Console nếu bạn muốn sử dụng nó, nhưng nếu không
- Mở
server/slim/conf/jboss-service.xmltrong vi. - Xóa:
<mbean code="org.jboss.naming.JNDIView" name="jboss:service=JNDIView" xmbean-dd="resource:xmdesc/JNDIView-xmbean.xml"> </mbean>
- Bạn cũng có thể xóa
server/slim/conf/xmdesc/JNDIView-xmbean.xml.
Nếu bạn không sử dụng JBossSX, trình bảo mật tích hợp dựa trên JAAS của chúng tôi cho EJB hoặc các thành phần Web (thì bạn xứng đáng bị đánh đòn và tôi hy vọng bạn bị hack nhưng đó là câu chuyện khác):
- Mở
server/slim/conf/jboss-service.xmltrong vi. - Xóa:
<!-- ==================================================================== --> <!-- Security --> <!-- ==================================================================== --> <!-- <mbean code="org.jboss.security.plugins.SecurityConfig" name="jboss.security:service=SecurityConfig"> <attribute name="LoginConfig">jboss.security:service=XMLLoginConfig</attribute> </mbean> <mbean code="org.jboss.security.auth.login.XMLLoginConfig" name="jboss.security:service=XMLLoginConfig"> <attribute name="ConfigResource">login-config.xml</attribute> </mbean> --> - Chỉnh sửa
server/slim/deploy/jbossweb-tomcatxx.sar/META-INF/jboss-service.xmlvà bình luận các đoạn sau:<!-- The JAAS security domain to use in the absense of an explicit security-domain specification in the war WEB-INF/jboss-web.xml --> <!-- <attribute name="DefaultSecurityDomain">java:/jaas/other</attribute>-->và<!-- A mapping to the server security manager service which must be operation compatible with type org.jboss.security.plugins.JaasSecurityManagerServiceMBean. This is only needed if web applications are allowed to flush the security manager authentication cache when the web sessions invalidate. --> <!-- <depends optional-attribute-name="SecurityManagerService" proxy-type="attribute">jboss.security:service=JaasSecurityManager --></depends>--> - Cũng xóa/bình luận:
<!-- JAAS security manager and realm mapping --> <mbean code="org.jboss.security.plugins.JaasSecurityManagerService" name="jboss.security:service=JaasSecurityManager"> <attribute name="SecurityManagerClassName"> org.jboss.security.plugins.JaasSecurityManager </attribute> <attribute name="DefaultCacheTimeout">1800</attribute> <attribute name="DefaultCacheResolution">60</attribute> </mbean> - Nếu bạn đang sử dụng JBossMQ, bạn sẽ cần xóa tất cả các hàng đợi/chủ đề kiểm thử khỏi
server/slim/deploy/jms/jbossmq-destinations-service.xmlhoặc bình luận thông tin bảo mật của chúng. Thêm các bình luận như sau nếu bạn chọn giữ các chủ đề/hàng đợi ví dụ:<mbean code="org.jboss.mq.server.jmx.Topic" name="jboss.mq.destination:service=Topic,name=testTopic"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> <!-- <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends> <attribute name="SecurityConf"> <security> <role name="guest" read="true" write="true"/> <role name="publisher" read="true" write="true" create="false"/> <role name="durpublisher" read="true" write="true" create="true"/> </security> </attribute>--> </mbean> <mbean code="org.jboss.mq.server.jmx.Topic" name="jboss.mq.destination:service=Topic,name=testTopic"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> <!-- <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends> <attribute name="SecurityConf"> <security> <role name="guest" read="true" write="true"/> <role name="publisher" read="true" write="true" create="false"/> <role name="durpublisher" read="true" write="true" create="true"/> </security> </attribute>--> </mbean> <mbean code="org.jboss.mq.server.jmx.Topic" name="jboss.mq.destination:service=Topic,name=testDurableTopic"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> <!-- <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends> <attribute name="SecurityConf"> <security> <role name="guest" read="true" write="true"/> <role name="publisher" read="true" write="true" create="false"/> <role name="durpublisher" read="true" write="true" create="true"/> </security> </attribute>--> </mbean> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=testQueue"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> <!-- <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends> <attribute name="SecurityConf"> <security> <role name="guest" read="true" write="true"/> <role name="publisher" read="true" write="true" create="false"/> <role name="noacc" read="false" write="false" create="false"/> </security> </attribute>--> </mbean> - Nếu sử dụng JBossMQ, bạn cũng sẽ cần chỉnh sửa
server/slim/deploy/jms/jbossmq-service.xmlvà thay đổi đoạn mãInterceptorLoaderthành:<mbean code="org.jboss.mq.server.jmx.InterceptorLoader" name="jboss.mq:service=TracingInterceptor"> <attribute name="InterceptorClass">org.jboss.mq.server.TracingInterceptor</attribute> <depends optional-attribute-name="NextInterceptor">jboss.mq:service=DestinationManager</depends> <!-- <depends optional-attribute-name="NextInterceptor">jboss.mq:service=SecurityManager</depends> --> </mbean> - Bạn cũng cần bình luận hoặc xóa (khỏi
server/slim/deploy/jms/jbossmq-service.xml):<!-- <mbean code="org.jboss.mq.security.SecurityManager" name="jboss.mq:service=SecurityManager"> <attribute name="DefaultSecurityConfig"> <security> <role name="guest" read="true" write="true" create="true"/> </security> </attribute> <attribute name="SecurityDomain">java:/jaas/jbossmq</attribute> <depends optional-attribute-name="NextInterceptor">jboss.mq:service=DestinationManager</depends> </mbean> --> - Sửa đổi mục hàng đợi chết (
server/slim/deploy/jms/jbossmq-service.xml) bằng cách bình luận phần bảo mật:<!-- Dead Letter Queue --> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=DLQ"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> <!-- <depends optional-attribute-name="SecurityManager">jboss.mq:service=SecurityManager</depends>--> </mbean> - Trong
server/slim/deploy/jms/jms-ds.xml, sửa đổi mụcJmsXAđể nó đọc như sau:<!-- JMS XA Resource adapter, use this to get transacted JMS in beans --> <tx-connection-factory> <jndi-name>JmsXA</jndi-name> <xa-transaction></xa-transaction> <adapter-display-name>JMS Adapter</adapter-display-name> <config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Topic</config-property> <config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider</config-property> <max-pool-size>20</max-pool-size> <!-- <security-domain-and-application>JmsXARealm</security-domain-and-application>--> </tx-connection-factory> - Nếu sử dụng JBoss 4, cũng thực hiện 2 điều này:
- Trong
conf/login-config.xml, bình luận như sau:<!-- Security domains for testing new jca framework <application-policy name = "HsqlDbRealm"> <authentication> <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule" flag = "required"> <module-option name = "principal">sa</module-option> <module-option name = "userName">sa</module-option> <module-option name = "password"></module-option> <module-option name = "managedConnectionFactoryName"> jboss.jca:service=LocalTxCM,name=DefaultDS </module-option> </login-module> </authentication> </application-policy> <application-policy name = "JmsXARealm"> <authentication> <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule" flag = "required"> <module-option name = "principal">guest</module-option> <module-option name = "userName">guest</module-option> <module-option name = "password">guest</module-option> <module-option name = "managedConnectionFactoryName"> jboss.jca:service=TxCM,name=JmsXA </module-option> </login-module> </authentication> </application-policy> --> - Và trong
deploy/hsqldb-ds.xml, bình luận:<!-- Use the security domain defined in conf/login-config.xml <security-domain>HsqlDbRealm</security-domain> -->
- Trong
Nếu bạn không sử dụng Pooled Invoker (xem phần tinh chỉnh, bạn có thể muốn sử dụng pooled invoker) thì:
- Mở
server/slim/conf/jboss-service.xmltrong vi. - Xóa:
<!-- <mbean code="org.jboss.invocation.pooled.server.PooledInvoker" name="jboss:service=invoker,type=pooled"> <attribute name="NumAcceptThreads">1</attribute> <attribute name="MaxPoolSize">300</attribute> <attribute name="ClientMaxPoolSize">300</attribute> <attribute name="SocketTimeout">60000</attribute> <attribute name="ServerBindAddress">${jboss.bind.address}</attribute> <attribute name="ServerBindPort">4445</attribute> <attribute name="ClientConnectAddress">${jboss.bind.address}</attribute> <attribute name="ClientConnectPort">0</attribute> <attribute name="EnableTcpNoDelay">false</attribute> <depends optional-attribute-name="TransactionManagerService"> jboss:service=TransactionManager</depends> </mbean> -->
Nếu bạn không muốn sử dụng BeanShell deployer
- Mở
server/slim/conf/jboss-service.xmltrong vi. - Xóa hoặc bình luận:
<mbean code="org.jboss.varia.deployment.BeanShellSubDeployer" name="jboss.scripts:service=BSHDeployer"> </mbean>
- Xóa
server/slim/bsh(bsh-deployer.jar,bsh-1.3.0.jar).
Đối với JBoss 4.0.5:
- Xóa
server/slim/deploy/bsh-deployer.xml. - Xóa
server/slim/lib/bsh-deployer.jar. - Xóa
server/slim/lib/bsh-1.3.0.jar.
Nếu bạn không muốn triển khai nóng các tệp vào thư mục server/slim/deploy mà không cần khởi động lại JBoss:
- Mở
server/slim/conf/jboss-service.xmltrong vi. - Thay đổi đoạn XML này:
<!-- An mbean for hot deployment/undeployment of archives. --> <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner" name="jboss.deployment:type=DeploymentScanner,flavor=URL"> ... <attribute name="ScanPeriod">5000</attribute> ... </mbean>thành (bằng cách thêm):<!-- An mbean for hot deployment/undeployment of archives. --> <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner" name="jboss.deployment:type=DeploymentScanner,flavor=URL"> ... <attribute name="ScanPeriod">5000</attribute> <attribute name="ScanEnabled">False</attribute> ... </mbean> - Xem phần tinh chỉnh để biết thêm lời khuyên về điều này từ góc độ hiệu suất.
Nếu bạn không sử dụng clustering
- Cách tốt nhất là bắt đầu từ cấu hình "default" thay vì cấu hình "all". Sau đó, mang từ cấu hình "all" bất kỳ dịch vụ lặt vặt nào bạn đang sử dụng mà không có trong "default".
- Nếu bạn bắt buộc phải bắt đầu từ cấu hình "all":
- Xóa
server/slim/farm. - Xóa
server/slim/deploy-hasingleton. - Xóa
server/slim/deploy/cluster-service.xml. - Xóa
server/slim/deploy/tc5-cluster-service.xml(HOẶCserver/slim/deploy/tc5-cluster.sartrên 4.0.4 trở lên). - Xóa
server/slim/deploy/deploy.last/farm-service.xml. - Xóa
server/slim/deploy/deploy-hasingleton-service.xml. - Đi vào thư mục
server/slim/deploy/jms, xóa nội dung của nó và thay thế bằng nội dung của thư mụcserver/default/deploy/jms. - Chỉnh sửa
server/slim/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xmlđể xóa đoạn này:<!-- Needed if using HTTP Session Clustering or if the ClusteredSingleSignOn valve is enabled in the tomcat server.xml file --> <depends>jboss.cache:service=TomcatClusteringCache</depends>
- Xóa
Nếu bạn không sử dụng các phiên web phân tán (clustered)
- Xóa
server/slim/deploy/tc5-cluster-service.xml(HOẶCserver/slim/deploy/tc5-cluster.sartrên 4.0.4 trở lên). - Chỉnh sửa
server/slim/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xmlđể xóa đoạn này:<!-- Needed if using HTTP Session Clustering or if the ClusteredSingleSignOn valve is enabled in the tomcat server.xml file --> <depends>jboss.cache:service=TomcatClusteringCache</depends>
Nếu bạn không sử dụng Farm service (triển khai nhân bản)
- Xóa
server/slim/farm. - Xóa
server/slim/deploy/deploy.last/farm-service.xml.