ps aux treo trên cpu / IO cao với các tiến trình java


13

Tôi đang gặp một số vấn đề với quá trình java và kiểm tra nrpe. Chúng tôi có một số quy trình đôi khi sử dụng 1000% cpu trên hệ thống 32 lõi. Hệ thống khá nhạy cho đến khi bạn thực hiện

ps aux 

hoặc cố gắng làm bất cứ điều gì trong / Proc / pid # như

[root@flume07.domain.com /proc/18679]# ls
hangs..

Một bước tiến của ps

stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2819, ...}) = 0
stat("/dev/pts1", 0x7fffb8526f00)       = -1 ENOENT (No such file or directory)
stat("/dev/pts", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
readlink("/proc/15693/fd/2", "/dev/pts/1", 127) = 10
stat("/dev/pts/1", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
write(1, "root     15693 15692  0 06:25 pt"..., 55root     15693 15692  0 06:25 pts/1    00:00:00 ps -Af
) = 55
stat("/proc/18679", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/18679/stat", O_RDONLY)      = 5
read(5, "18679 (java) S 1 18662 3738 3481"..., 1023) = 264
close(5)                                = 0
open("/proc/18679/status", O_RDONLY)    = 5
read(5, "Name:\tjava\nState:\tS (sleeping)\nT"..., 1023) = 889
close(5)                                = 0
open("/proc/18679/cmdline", O_RDONLY)   = 5
read(5,

quá trình java đang hoạt động và sẽ hoàn thành tốt, nhưng vấn đề là nó làm cho quá trình suy nghĩ của chúng ta bị chậm lại vì quá trình chờ đợi một ps aux hoàn thành.

Tôi đã thử làm một cái gì đó như

 nice -19 ionice -c1 /usr/lib64/nagios/plugins/check_procs -w 1:1 -c 1:1 -a 'diamond' -u root -t 30

không có may mắn

BIÊN TẬP

Thông số hệ thống

  • CPU 32 nhân Intel (R) Xeon (R) E5-2650 0 @ 2.00GHz
  • 128g ram
  • 12 ổ 4Tb 7200
  • CentOS 6.5
  • Tôi không chắc chắn về model nhưng nhà cung cấp là SuperMicro

Tải trọng khi điều này xảy ra là khoảng 90-160ish trong 1 phút.

Phần kỳ lạ là tôi có thể đi vào bất kỳ / Proc / pid # nào khác và nó hoạt động tốt. Hệ thống phản hồi nhanh khi tôi ssh. Giống như khi chúng tôi được cảnh báo về tải cao, tôi có thể ssh ngay trong tình trạng tốt.

Chỉnh sửa khác

Tôi đã sử dụng thời hạn cho lịch trình

[root@dn07.domain.com ~]# for i in {a..m}; do cat /sys/block/sd${i}/queue/scheduler; done
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq
noop anticipatory [deadline] cfq

Núi trông như

[root@dn07.manage.com ~]# mount
/dev/sda3 on / type ext4 (rw,noatime,barrier=0)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext2 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdb1 on /disk1 type xfs (rw,nobarrier)
/dev/sdc1 on /disk2 type xfs (rw,nobarrier)
/dev/sdd1 on /disk3 type xfs (rw,nobarrier)
/dev/sde1 on /disk4 type xfs (rw,nobarrier)
/dev/sdf1 on /disk5 type xfs (rw,nobarrier)
/dev/sdg1 on /disk6 type xfs (rw,nobarrier)
/dev/sdh1 on /disk7 type xfs (rw,nobarrier)
/dev/sdi1 on /disk8 type xfs (rw,nobarrier)
/dev/sdj1 on /disk9 type xfs (rw,nobarrier)
/dev/sdk1 on /disk10 type xfs (rw,nobarrier)
/dev/sdl1 on /disk11 type xfs (rw,nobarrier)
/dev/sdm1 on /disk12 type xfs (rw,nobarrier)

Ok tôi đã cố gắng cài đặt điều chỉnh và đặt nó thành hiệu suất thông lượng.

[root@dn07.domain.com ~]# tuned-adm profile throughput-performance
Switching to profile 'throughput-performance'
Applying deadline elevator: sda sdb sdc sdd sde sdf sdg sdh[  OK  ] sdk sdl sdm
Applying ktune sysctl settings:
/etc/ktune.d/tunedadm.conf:                                [  OK  ]
Calling '/etc/ktune.d/tunedadm.sh start':                  [  OK  ]
Applying sysctl settings from /etc/sysctl.d/99-chef-attributes.conf
Applying sysctl settings from /etc/sysctl.conf
Starting tuned:                                            [  OK  ]

Bạn có thể cung cấp thông tin về môi trường máy chủ? Phân phối hệ điều hành và phiên bản, nền tảng phần cứng sẽ có liên quan.
ewwhite

Tải hệ thống của bạn tại điểm khi điều này xảy ra cũng rất quan trọng.
ewwhite

Tôi đã thực hiện một số chỉnh sửa với thông số kỹ thuật và tải là gì
Mike

Sản lượng của mounttrông như thế nào?
ewwhite

Rất tốt. Xem xét sử dụng tuned-adm profile enterprise-storagelệnh để xử lý chuyển đổi nobarrier và thời hạn. Làm những gì dmesg|tailđầu ra chương trình? Bạn có thấy thời gian chờ I / O không?
ewwhite

Câu trả lời:


8

Nói chung, tôi đã thấy điều này xảy ra vì đọc bị đình trệ. Điều này được xác nhận bởi straceđầu ra của bạn . Cố gắng đọc tệp / Proc / xxxx / cmdline bị treo trong khi bạn đang chạy ps auxlệnh.

Các đột biến nhất thời trong I / O đang làm cạn kiệt tài nguyên của hệ thống. Tải 90-160 là một tin cực kỳ xấu nếu nó liên quan đến hệ thống lưu trữ.

Đối với mảng lưu trữ, bạn có thể cho chúng tôi biết nếu có bộ điều khiển RAID phần cứng không? Là ứng dụng chính trên máy chủ viết sai lệch? Các đĩa bạn đề cập (12 x 4TB) là các đĩa SAS hoặc SATA tốc độ thấp hơn tốc độ thấp hơn. Nếu không có hình thức ghi bộ đệm vào trước mảng ổ đĩa, thì ghi có khả năng đẩy tải hệ thống lên cao. Nếu đây là các ổ đĩa SATA thuần trên bảng nối đa năng của Supermicro, đừng giảm khả năng xảy ra các sự cố đĩa khác (hết thời gian, lỗi ổ đĩa, bảng nối đa năng, v.v. ) Điều này có xảy ra trên tất cả các nút Hadoop không?

Một thử nghiệm dễ dàng là cố gắng chạy iotoptrong khi điều này đang xảy ra. Ngoài ra, vì đây là EL6.5, bạn có bật tuned-admcài đặt nào không? Là rào cản viết được kích hoạt?

Nếu bạn không thay đổi thang máy I / O của máy chủ, ionicecó thể có tác động. Nếu bạn đã thay đổi nó thành bất cứ điều gì khác ngoài CFQ , ( máy chủ này có lẽ sẽ đúng hạn ), ionicesẽ không có sự khác biệt nào.

Biên tập:

Một điều kỳ lạ khác tôi từng thấy trong môi trường sản xuất. Đây là các quy trình Java và tôi sẽ cho rằng chúng rất đa luồng. Làm thế nào bạn đang làm về PID? Là gì sysctlgiá trị cho kernel.pid_max ? Tôi đã có những tình huống mà tôi đã cạn kiệt các PID trước đây và có kết quả tải cao.

Ngoài ra, bạn đề cập đến phiên bản kernel 2.6.32-358.23.2.el6.x86_64 . Đó là hơn một năm tuổi và là một phần của phiên bản CentOS 6.4, nhưng phần còn lại của máy chủ của bạn là 6,5. Bạn đã cập nhật danh sách đen kernel trong yum.conf chưa? Có lẽ bạn nên dùng kernel 2.6.32-431.xx hoặc mới hơn cho hệ thống đó. Có thể có một vấn đề lớn với hạt nhân cũ hơn mà bạn có . Nếu bạn không thể thay đổi kernel, hãy thử vô hiệu hóa chúng bằng:

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled.


có thẻ đột kích nhưng nó chỉ được sử dụng để xử lý 12 ổ đĩa trên máy chủ. Nó là một phần của cụm Hadoop vì vậy nó viết rất nhiều nhưng cũng có những khóa này xuất hiện khi sợi đang kéo rất nhiều dữ liệu cho một công việc giảm bản đồ.
Mike

Tôi đang nhận trung tâm dữ liệu gọi cho tôi để xem họ có biết bộ điều khiển đột kích được đặt để ghi bộ đệm không. Đối với thẻ, 3a0613065fa Adaptec \ 71605 \ SATA/SAS RAID tôi đã xác minh rằng chúng cũng là ổ đĩa SATA Western Digital WD RE WD4000FYYZ
Mike

1
@mike Nếu bạn không thể thay đổi kernel, hãy thử: echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabledtrên máy bị ảnh hưởng. Tôi cho rằng điều này có thể tái tạo đủ để bạn có thể quan sát trước / sau với cài đặt này.
ewwhite

4
có vẻ như điều chỉnh và vô hiệu hóa hugepage đã giúp khắc phục vấn đề!
Mike

1
@Mike Tuyệt vời. Một bản cập nhật kernel cũng có thể cung cấp một số cứu trợ. Nhưng nếu bạn bị kẹt với kernel đang chạy, tôi rất vui vì bản sửa lỗi này hoạt động.
ewwhite

3

Vấn đề là rõ ràng không phải là một vấn đề liên quan đến đĩa. Và điều này là rõ ràng từ các bước treo cổ:

open("/proc/18679/cmdline", O_RDONLY)   = 5
read(5,

/ Proc là một giao diện giữa kernel và không gian người dùng. Nó không chạm vào đĩa cả. Nếu một cái gì đó bị treo khi đọc các đối số của lệnh thì nó thường là một vấn đề liên quan đến kernel và không chắc là lưu trữ. Xem bình luận @kasperd.

Tải chỉ là một tác dụng phụ của vấn đề và số lượng cao không nói lên toàn bộ câu chuyện. Bạn có thể có một máy chủ có tải rất cao mà ứng dụng hoạt động mà không gặp trục trặc.

Bạn có thể có thêm thông tin về những gì đang xảy ra với cat /proc/$PID/stack. Trong trường hợp $PIDlà quá trình ID nơi đọc quầy hàng.

Trong trường hợp của bạn, tôi sẽ bắt đầu với một nâng cấp kernel.


2
Bạn đang nhầm. Những gì được trả về bằng cách đọc /proc/%d/cmdlinelà một phần của không gian địa chỉ của tiến trình trong đó kernel lưu trữ dòng lệnh trong suốt execvecuộc gọi. Giống như bất kỳ phần nào khác của không gian người dùng, nó có thể bị tráo đổi. Vì vậy, truy cập nó thực sự có thể phải chờ cho trang được hoán đổi một lần nữa.
kasperd

Đây là một lập luận rất tốt. Cảm ơn bạn đã tăng lên. Tuy nhiên tôi nghĩ rằng cơ hội để bước đi bắt đầu khi trao đổi của bạn không trả lời là thấp, nhưng không phải là không thể. Tôi sẽ cập nhật câu trả lời của tôi.
Mircea Vutcovici

2

Vì vậy, ngay cả với tất cả các tinh chỉnh và nâng cấp lên kernel 2.6 mới nhất mà CentOS cung cấp, chúng tôi vẫn thấy bị treo. Không còn nhiều như trước nhưng vẫn thấy họ.

Cách khắc phục là nâng cấp lên kernel series 3.10.x mà CentOS cung cấp trong repo centosplus của họ tại đây

http://mirror.centos.org/centos/6/xen4/x86_64/Packages/

Điều này đã được thực hiện với tất cả các quá trình treo cây. Giống như tôi đã nói hệ thống không phải chịu bất kỳ tải điên nào, nơi chạy các quy trình mới không linh hoạt. Vì vậy, hầu hết là một vấn đề kernel 2.6 ở đâu đó.


0

Đây là một sửa chữa khác.

Có vẻ như chúng tôi đang chạy bộ điều khiển đột kích sau

Adaptec 71605

Tôi đã thực hiện cập nhật firmware cho tất cả các máy bị ảnh hưởng lên phiên bản mới nhất và có vẻ như nó đang giải quyết vấn đề.

Chúng tôi đã phải hạ cấp từ thử nghiệm kernel 3.10 do các sự cố ngẫu nhiên khác khi cài đặt 3.10 trên CentOS 6 nhưng việc nâng cấp firmware dường như đã khắc phục được sự cố.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.