그렇게 오래 걸리는 Symfony 방화벽은 무엇입니까?
내 Symfony 페이지가 너무 느리지는 않지만 (약 400ms에로드 됨) 기본 인증이있는 간단한 hello world 페이지라는 사실을 고려하면 100ms 미만으로로드되어야합니다. 프로파일 러에 들어가면 다음과 같이 표시됩니다.
250ms 동안 "방화벽"이라고 만 표시됩니다. 방화벽이 페이지의 특정 영역에서 사용자를 차단하는 역할 만한다고 생각했습니다. 데이터베이스에서 사용자 정보를 가져 오는 데 걸리는 시간과 몇 밀리 초 이상이 걸린다는 것을 상상할 수 없습니다 (이 경우에는 61ms).
누군가 방화벽이 실제로 무엇을하는지 설명 할 수 있습니까? 방화벽 성능을 향상시키는 방법에 대한 일반적인 조언이 있다면 대단히 감사하겠습니다.
참고 : 나는 물론 이것을 구글링했고, 호스트 이름이 아닌 IP 주소로 MySQL 데이터베이스에 연결하고 있음을 미리 지정하고 싶습니다. 이것은 내가 찾을 수있는 느린 Symfony 방화벽의 다른 모든 경우에 대한 문제인 것처럼 보였습니다.
관련 될 수있는 내 프로젝트의 일부 리소스 :
- security.yaml
- routing.yaml
- Astrups / SpectacleBundle / Entity / User.php
- Astrups / SpectacleBundle / Service / Sha1Salted.php
인터넷 검색을 한 결과이 사람이 귀하의 질문에 대한 답을 가지고있는 것 같습니다.
15 분의 연구 끝에 저는 이것이 PHP PDO 생성자 때문이라는 것을 알게되었습니다 (내 방화벽은 엔티티를 사용자로 사용하기 때문에 데이터베이스에 처음으로 연결됩니다). 이 지식으로 문제가 매우 빨리 발견되었습니다 ( [1] , [2] ) : IP (예 : '127.0.0.1') 대신 DNS 이름 (예 : 'localhost')을 사용하면이 문제가 발생합니다.
parameters.yml 파일의 간단한 편집 (localhost를 127.0.0.1로 변경)은 방화벽로드 시간을 최소로 줄이는 트릭을 수행했습니다.
아아, Rawdreeg 가 부분적으로 옳았습니다. MySQL 서버에 연결하는 데 걸리는 시간을 프로파일 링하기 위해 20 줄의 PHP 스크립트를 만들었습니다.
<?php
$time = microtime(true);
$con = new PDO(...);
$connect_time = microtime(true);
$result = $con->query('SHOW TABLES');
$query_time = microtime(true);
var_dump($result->fetchAll(PDO::FETCH_ASSOC));
$time_con = ($connect_time - $time) * 1000;
$time_query = ($query_time - $connect_time) * 1000;
echo "Connection took $time_con ms\n";
echo "Query took $time_query ms\n";
출력은 다음과 같습니다.
연결에 230.18503189087ms 소요 쿼리에 64.532995223999ms 소요
Symfony 프로파일 러의 공백을 완벽하게 채 웁니다 . 좋은 소식은 내 응용 프로그램이 실행되면 소켓을 통해 MySQL 서버에 로컬로 연결되므로 아마도 매우 빠를 것입니다! 하지만 로컬에서 MySQL 서버를 미러링하는 것 외에는 개발 중에 속도에 대해 할 수있는 일이 거의 없습니다.
그래서 답을 요약하면; Symfony 방화벽은 처음에 MySQL 데이터베이스에 대한 연결을 생성하며 제 경우에는 연결 속도가 매우 느립니다. 제 경우에는 MySQL 연결 시간이 방화벽 프로파일 링 시간의 80 % 이상을 차지합니다.
참고 : 이미 IP 주소로 MySQL 서버에 연결 skip-name-resolve
중이며 MySQL 구성에 추가 하지 않아도됩니다.
MySQL 서버가 문제 일 수 있습니다. 추가 시도 skip-name-resolve
받는 [mysqld]
당신의 섹션 my.cnf
파일. 이렇게하면 MySQL이 들어오는 연결의 IP 주소에 대한 역방향 DNS 조회를 수행하지 않습니다.
참고 URL : https://stackoverflow.com/questions/16111324/what-is-the-symfony-firewall-doing-that-takes-so-long
'developer tip' 카테고리의 다른 글
Sun의 javac에서 생성 된 이상한 예외 테이블 항목 (0) | 2020.12.13 |
---|---|
Google Cloud Endpoints에 대한 커스텀 인증 (OAuth2 대신) (0) | 2020.12.13 |
div 아래 / 뒤의 콘텐츠를 흐리게 할 수 있습니까? (0) | 2020.12.13 |
UITableView의 지연로드 이미지 (0) | 2020.12.13 |
Perl 개발을위한 이상적인 Vim 구성에 대한 제안은 무엇입니까? (0) | 2020.12.13 |