本主題描述如何調整 Linux 操作系統以提高 WebSphere Application Server 的性能。
關於本任務
遇到性能問題時,請檢查操作系統設置以確定這些設置是否適合於您的應用程序。由於 Linux 操作系統不是 WebSphere Application Server 產品,因此請注意,它可能會改變,並且結果可能會有所變化。過程
根據調整需求,配置下列設置和變量:
To support over 500k users, you *need*
- A 64 bits hardware/kernel (AMD64, Opterons)
- At least 8GB of ram
- A recent linux kernel (2.6.x)
About tuning, I prefer to not fully disclose them because servers are targets of many attacks, so it's better not help hackers.
The most touchy thing is the IP route cache : You have to tune it or else the machine drops many connections
(hint : rhash_entries=... in the boot append string)
hints :
echo 1 > /proc/sys/net/ipv4/route/gc_interval
echo 150 >/proc/sys/net/ipv4/route/gc_timeout
echo 2 >/proc/sys/net/ipv4/route/gc_elasticity
- Use of hugeTLB pages
hint :
echo xxx >/proc/sys/vm/nr_hugepages
Tune tcp :
echo "4096 49152 131072" >/proc/sys/net/ipv4/tcp_wmem
echo xxxx >/proc/sys/net/ipv4/tcp_max_syn_backlog
echo xxxx >/proc/sys/net/core/somaxconn
echo 1200000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 7 >/proc/sys/net/ipv4/tcp_retries2
echo "600000 650000 700000" >/proc/sys/net/ipv4/tcp_mem
echo 0 >/proc/sys/net/ipv4/tcp_timestamps
echo 0 >/proc/sys/net/ipv4/tcp_window_scaling
echo 0 >/proc/sys/net/ipv4/tcp_sack
echo 330000 >/proc/sys/net/ipv4/tcp_max_orphans
echo "10000 62000" >/proc/sys/net/ipv4/ip_local_port_range
others :
echo 1300000 >/proc/sys/fs/file-max
- A 64 bits hardware/kernel (AMD64, Opterons)
- At least 8GB of ram
- A recent linux kernel (2.6.x)
About tuning, I prefer to not fully disclose them because servers are targets of many attacks, so it's better not help hackers.
The most touchy thing is the IP route cache : You have to tune it or else the machine drops many connections
(hint : rhash_entries=... in the boot append string)
hints :
echo 1 > /proc/sys/net/ipv4/route/gc_interval
echo 150 >/proc/sys/net/ipv4/route/gc_timeout
echo 2 >/proc/sys/net/ipv4/route/gc_elasticity
- Use of hugeTLB pages
hint :
echo xxx >/proc/sys/vm/nr_hugepages
Tune tcp :
echo "4096 49152 131072" >/proc/sys/net/ipv4/tcp_wmem
echo xxxx >/proc/sys/net/ipv4/tcp_max_syn_backlog
echo xxxx >/proc/sys/net/core/somaxconn
echo 1200000 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 7 >/proc/sys/net/ipv4/tcp_retries2
echo "600000 650000 700000" >/proc/sys/net/ipv4/tcp_mem
echo 0 >/proc/sys/net/ipv4/tcp_timestamps
echo 0 >/proc/sys/net/ipv4/tcp_window_scaling
echo 0 >/proc/sys/net/ipv4/tcp_sack
echo 330000 >/proc/sys/net/ipv4/tcp_max_orphans
echo "10000 62000" >/proc/sys/net/ipv4/ip_local_port_range
others :
echo 1300000 >/proc/sys/fs/file-max
某些應用程序要求使用非常大的堆以提高性能。通過使用 CPU 和操作系統提供的“大頁”支持,可以降低 CPU 管理大型堆的開銷。以下示例假定大頁大小爲 4MB,並且期望的堆大小爲 2300MB。
- 通過 sysctl.conf 文件(此文件通常是 /etc/sysctl.conf)設置下列三個設置。
注: 您必須具有 root 用戶訪問權才能修改此文件。並且,在嘗試修改此文件前,請驗證此文件是否是隻讀的。
- 通過發出以下命令,設置大頁數(2300MB = 575 * 4MB):
vm.nr_hugepages = 575
- 通過發出以下命令,將最大共享段大小設置爲 2300MB 加上一個較小的增量(大約 95MB)(2511724800 = 2300MB * 1048576 字節/MB + 100000000 字節):
kernel.shmmax = 2511724800
- 通過發出以下命令,設置要共享的總內存量:
kernel.shmall = 2511724800
- 通過發出以下命令,設置大頁數(2300MB = 575 * 4MB):
- 指定 -Xlp JVM 選項,以使 JVM 堆能夠利用大頁。
- 將 Xmx JVM 選項設置爲 2300MB。
- 將程序文本重新定位到較低的虛擬內存地址(0x10000000)中,從而爲較大的堆提供更多地址空間。在 SUSE Linux Enterprise Server 9 上,請運行以下命令來重新定位 JVM 調用腳本或 .profile 文件中的文本:
echo "0x10000000" > /proc/self/mapped_base