2012-03-25 5 views
1

원격 서버에서 호스팅되는 웹 사이트가 있습니다. 이 웹 사이트의 페이지로 이동하여 특정 작업을 수행하려고합니다. 자세한 내용은 필요한 경우 자세히 설명 할 수 있습니다. 그러나 당분간은 데이터가있는 서버에서 프로그램을 실행하는 작업이 필요합니다.)웹 사이트 실행 후 PHP 작업 수행

페이지가 계속로드됩니다. 그래서 메인 웹 사이트로 이동하려고합니다. 이제는 문제없이 계속로드됩니다. 약 하루가 지나면 웹 사이트가 다시 돌아옵니다. 따라서 특정 시간이 지나면 작업을 종료하는 자동화 된 프로세스가있을 수 있습니다. 내 질문은 다음과 같습니다.

이 작업을 중단하거나 하루 종일 기다리지 않고 웹 사이트를 탐색 할 수 있도록 조치를 취할 수 있습니까? 필요한 경우 더 자세히 설명 할 수 있습니다.

감사합니다.

요청에 따라 좀 더 심층적 인 정보.

PHP 스크립트는 데이터베이스에서 텍스트 기반 정보를 검색합니다. 이 정보를 바탕으로 PHP 스크립트는 실행 가능한 프로그램을 호출합니다. 실행 파일의 출력이 화면에 출력됩니다.

mysql processlist를 확인한 결과 특히 오랜 시간이 걸리는 프로세스를 발견했습니다. 나는 그것을 죽였으므로 실행 파일이 계속 실행 중일 수 있습니다. 그렇다면 어떻게 결정할 것인가? 그렇지 않다면 잠재적으로 존재할 수있는 것이 있을까요? 감사.

를 해결 : 좋아, MySQL의 프로세스의 프로세스 목록을 표시하고 나는 그것이 실질적으로 오랜 시간이 걸렸보고 어떤 사람을 죽일 그래서 기본적으로 마이크 퍼셀의 조언을. 일단 이것이 끝나면, mysql과 httpd를 재시작하는 것이었다. 댓글을 달아 준 모든 분들께 다시 한번 감사드립니다.

+0

나머지 사이트는 데이터베이스 기반이며 동일한 정확한 데이터베이스 (사용자 자격 증명 등) – pp19dd

+4

을 사용하여 무한 접근합니다. –

+0

행동의 개요와 같은 자세한 정보를 제공 할 수 있습니까? 브라우저에서의 입력, PHP 스크립트 호출, 스크립트 실행 가능 등등 ... 충분한 정보를 제공하지 못하고 다곤이 말했듯이 가능성은 무한으로 접근합니다 . – grifos

답변

4

그와 같은 이상한 행동으로 인해 최적화되지 않은 쿼리가 실행되어 잘못된 쿼리가 실행될 때까지 다른 쿼리가 중단 될 수 있습니다. 당신이 단자를 통해 MySQL 서버에 액세스 할 수있는 경우에는 장기 실행 쿼리를 죽일 다음 명령을 실행 할 수 :

mysql> show processlist; 

이 명령을 출력 현재 실행중인 쿼리를. time 열에주의하십시오. 그러면 쿼리가 실행 된 시간 (초)이 표시됩니다. 이론적으로 몇 초 후에 쿼리를 실행해서는 안되지만 일부 쿼리는 쿼리와 관련된 데이터 집합에 따라 10 분 이상 걸릴 수 있습니다. 주목할 다른 열은 id 열입니다.이 값을 사용하면 수동으로 쿼리를 종료 할 수 있습니다 (Linux 시스템에서 프로세스를 종료하는 것처럼). 다시 show processlist 명령을 실행할 때

mysql> kill 387 # 387 is just an example 

지금, 그 쿼리 프로세스 목록에서 사라집니다.

+0

안녕하세요, 마이크, 의견 주셔서 감사합니다. 나는 목록에서 매우 오랜 시간이 걸리던 과정을 발견하고 계속해서 그것을 죽였다. 표시된 다른 프로세스는 "show processlist"에 대한 쿼리입니다. 거기에서 나는 mysql을 재시작하고 사이트로 이동하려고 시도했다. 그러나, 그것은 여전히 ​​다운 것으로 보인다. 어떤 제안? –

+0

궁금한 점이 있나요? 장기 실행 쿼리의 시간은 어땠습니까? 다음 단계는 아파치와 PHP 오류 로그를 꼬리로 무엇이 진행되고 있는지 살펴 보는 것입니다. httpd를 재시작해야 할 수도 있습니다. –

+0

아, 그럴 것입니다. 나는 긴 질의의 시간이 무엇인지를 꽤 기억할 수는 없지만, 그것은 6 또는 7 자리 길이라고 말하고 싶다. 이러한 잠재적으로 쇠약 해지는 문제를 방지하기 위해 권장할만한 것이 있습니까? 모든 도움을 주신 것에 대해 다시 한번 감사드립니다. –

2

DoS가 자신의 웹 사이트처럼 보입니다!

어쩌면이 웹 페이지가 웹 페이지가 아니어야하지만 수동으로 또는 cron을 통해 수행되는 작업일까요? 그렇지 않으면 누구든지이 페이지를 찾아서 원하는 웹 사이트를 죽일 수 있습니다 ...

이 프로그램에 너무 많은 리소스가 필요한 경우, 어떻게 든 그것을 제한해야합니다 : 리소스를 제한하려고 시도합니다 (어떻게 해야할지 모르겠지만 가능하다는 것을 알고 있습니다 : s)

문제가 이미 여기에 있다면, 당신은 문제가 MySQL의에서 오는 경우 공정 (다음 kill -9 processidps aux | grep <processname"), 또는 쿼리를 죽일 시도 할 수 있습니다 (show processis t 당신의 mysql 클라이언트 내부 후 kill <query n°>을). SQL을 먼저 시도하십시오.

+0

나는 범죄자 과정을 발견하고 앞서 가서 그것을 죽였다. 거기에서 나는 mysql을 재시작하고 사이트로 이동하려고 시도했지만 여전히 다운 된 것으로 보인다. 이것이 다른 이유는 무엇일까요? 도움에 다시 한번 감사드립니다. –

+0

추가 정보가 필요합니다. ■ Apache가 시작 되었습니까? – haltabush

+0

그래, 나는 정보의 부족에 대해 사과하지만 프로세스를 죽인 후에 그것은 mysql/apache를 재시작하는 문제였다. 도와 주셔서 다시 한번 감사드립니다. –

2

집중적 인 MySQL 프로세스로 인해 사이트가 잠겨 있거나 MySQL 프로세스가 불량 일 경우 가장 좋은 방법은 프로세스를 자체 데이터베이스 스레드로 분리하여 정상적인 테이블이 잠기지 않게하는 것입니다.

다른 옵션은 MyISAM에서 InnoDB 엔진으로 일부 데이터베이스를 전환하는 것입니다 (작동하는 경우). 배치 삽입이 느려지고 성능 서명이 달라 지지만 이러한 심각한 잠금이 적용되지는 않습니다.