갑자기 응용 프로그램에서 서버의 CPU와 메모리를 망치고 있습니다. 이 "pegging"이 시작된 이후 코드를 변경하지 않았습니다. strace로 파고 들어 어떤 일을했는지 알아 내려고했지만 출력이 실제로 의미하는 것을 해독하는 데 도움이 필요합니다. 나는 100 % CPU 사용량으로 몇 분 동안 실행 중이던 약 1GB의 메모리를 사용하여 1.5GB의 메모리를 사용하고 strace -c를 실행했다. 나는 다음과 같은 결과를 얻었다. 나는 clone과 wait4 명령에 오랜 시간을 할애하고 있습니다. 아무도 내게이 정보로 이동하는 방향을 줄 수 있습니까?cpu pegged, memory pegged, strace output
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
54.10 1.011982 252996 4 clone
30.67 0.573741 51 11296 brk
11.98 0.224099 56025 4 wait4
1.96 0.036701 53 687 munmap
0.68 0.012642 1580 8 mremap
0.58 0.010928 2 4886 5 read
0.01 0.000135 0 2854 fstat
0.01 0.000112 0 845 25 open
0.00 0.000073 0 935 115 lstat
0.00 0.000044 0 97 23 access
0.00 0.000043 0 464 40 stat
0.00 0.000037 0 466 write
0.00 0.000037 0 466 gettimeofday
0.00 0.000035 0 840 close
0.00 0.000000 0 173 poll
0.00 0.000000 0 210 lseek
0.00 0.000000 0 688 mmap
0.00 0.000000 0 5 rt_sigaction
0.00 0.000000 0 5 rt_sigprocmask
0.00 0.000000 0 16 writev
0.00 0.000000 0 55 setitimer
0.00 0.000000 0 2 socket
0.00 0.000000 0 2 2 connect
0.00 0.000000 0 4 accept
0.00 0.000000 0 6 shutdown
0.00 0.000000 0 4 getsockname
0.00 0.000000 0 10 setsockopt
0.00 0.000000 0 2 getsockopt
0.00 0.000000 0 8 semop
0.00 0.000000 0 38 fcntl
0.00 0.000000 0 168 flock
0.00 0.000000 0 12 getdents
0.00 0.000000 0 25 getcwd
0.00 0.000000 0 10 chdir
0.00 0.000000 0 2 unlink
0.00 0.000000 0 2 chmod
0.00 0.000000 0 15 umask
0.00 0.000000 0 7 times
0.00 0.000000 0 2 1 futex
0.00 0.000000 0 4 epoll_wait
0.00 0.000000 0 6 openat
0.00 0.000000 0 4 pipe2
------ ----------- ----------- --------- --------- ----------------
100.00 1.870609 25337 211 total
NEW --- 추가 정보는
나는이에 대한 몇 가지 더 많은 정보를 가지고있다. 내 애플리케이션의 사용자가 이미지를 업로드합니다. 이미지를 업로드 할 디렉토리에는 80k와 업로드 된 이미지 파일이 있습니다. CPU와 메모리를 필요로하는 프로세스의 strace를 수행하면 해당 디렉토리에서 brk이 계속 읽 힙니다. 아래 strace에서 exceprt입니다.
poll([{fd=18, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
write(18, "e\2\0\0\3SELECT \"File\".\"ClassName\", "..., 617) = 617
read(18, "\1\0\0\1\0244\0\0\2\3def\4live\4File\4File\tCla"..., 16384) = 11488
read(18, "\0010\0010\00266\10MMSImage\343\0\0D\10MMSImage\02320"..., 16384) = 13032
read(18, "\373\0011\0010\0010\003122\10MMSImage\345\0\0|\10MMSImag"..., 16384) = 11584
read(18, "257\373\0011\0010\0010\003179\10MMSImage\345\0\0\255\10MMSI"..., 16384) = 16384
read(18, "nswer_Image/0_9373043939_1321407"..., 16384) = 16384
read(18, "or question #1054.Eassets/UserCo"..., 16384) = 16384
는 조금 나중에 BRK의
brk(0x7f2ba285e000) = 0x7f2ba285e000
brk(0x7f2ba291e000) = 0x7f2ba291e000
brk(0x7f2ba295e000) = 0x7f2ba295e000
brk(0x7f2ba299e000) = 0x7f2ba299e000
brk(0x7f2ba29de000) = 0x7f2ba29de000
brk(0x7f2ba2a1f000) = 0x7f2ba2a1f000
brk(0x7f2ba2a5f000) = 0x7f2ba2a5f000
brk(0x7f2ba2a9f000) = 0x7f2ba2a9f000
brk(0x7f2ba2adf000) = 0x7f2ba2adf000
brk(0x7f2ba2b1f000) = 0x7f2ba2b1f000
brk(0x7f2ba2b5f000) = 0x7f2ba2b5f000
brk(0x7f2ba2b9f000) = 0x7f2ba2b9f000
brk(0x7f2ba2bdf000) = 0x7f2ba2bdf000
brk(0x7f2ba2c1f000) = 0x7f2ba2c1f000
brk(0x7f2ba2c5f000) = 0x7f2ba2c5f000
brk(0x7f2ba2c9f000)
누구의 톤이에 갈 수 있습니다 알고. 디렉토리에 너무 많은 파일이 있습니까? 하드 드라이브가 디렉토리에 너무 많이 있어야합니까?
이 문제에 대한 추가 정보가 있습니다. 내 애플리케이션의 사용자가 이미지를 업로드합니다. 이미지를 업로드 할 디렉토리에는 80k와 업로드 된 이미지 파일이 있습니다. CPU와 메모리를 필요로하는 프로세스의 strace를 수행하면 해당 디렉토리에서 brk이 계속 읽 힙니다. 아래 strace에서 exceprt입니다. – Josh