CI 속도, 메모리, eAccelerator, Memcached
Posted by Albert 4118Day 16Hour 13Min 52Sec ago [2014-01-09]
우선, 한국말이 많이 서툴러 글이 이상하다면 사과드려요. ㅡㅡ;;
CodeIgniter는 빠르고, MVC를 자랑하는데요, 한가지 중요한건, 많은 model이나 library를 사용하게 돼면, 속도와 메모리 사용도가 빨리 오른다는거죠.
평균 잘만든 CI 페이지는 주로 2MB ~ 4MB 사용하는데요, 만약 5MB~7MB됀다면, 서버에 RAM이 512MB이라면, 73~102명이 한꺼번에 접속하면 서버가 느려지거나, DDoS당한거 처럼 다운됄수도 있습니다.
주로 사람들이 많이 들어오는 사이트들은 여러가지 방법으로 메모리를 줄이고 하는데요, 제일 중요한건 코드 입니다.
1. Autoload를 주의 합시다.
만약에 많은 model이나 library를 autoload에 사용한다면, 메모리에 사용도가 커집니다. 페이지 열면, 모든 model이랑 library들이 로드 됀다는 거죠. 그래서 항상, model이랑 library를 필할때만 로드해서 쓰는것이 좋습니다.
2. Profiler를 사용해서 문제점인 코드를 발견하기
CI에서 제가 자주 쓰는 Profiler란 툴이 있는데요, 그걸 이용하면 많은 정보를 볼수 있습니다.
이 코드를 __construct() 에 넣으면, 페이지 로드 할때 많은 정보가 나옵니다. 속도, 메모리, 문제있는 코드등..
만약에 SQL Query가 너무 많아도 메모리, 속도에 문제가 있을수 있습니다.
3. SQL Join 을 사용하여 DB접속률을 줄이기
만약에 여러 테이블에서 정보를 가지고 올때는, SQL join을 사용하면 접속률을 줄일수 있습니다.
이렇게 하면 테이블 project_users, auth_users, auth_meta 에서 한꺼번에 데이터를 가지고 올수 있는데요, 접속률을 줄일수 있는 방법이기도 하죠.
4. eAccelerator 사용하기
PHP를 오래 사용하신분들은 아마도 아실겁니다. PHP의 단점은, 코드를 compile 해놓는게 아니라, 볼때마나 compile하는 것입니다. 이렇게 하면, 속도와 메모리 사용도가 많이 오르는데요, 그래서 큰 회사들은 PHP를 안쓸려고 하기도 하죠. ASP.NET같은 경우, compile해서 페이지 로드가 빠른데요, PHP도 같은 기능을 지원해주는 eAccelerator라는 툴이 있습니다.
eAccelerator는 서버에 PHP와 설치 하는것인데요, 설치 해놓으면 5MB~6MB 코드가 갑자기 800KB~2MB로 내려간다는거죠. ㅋㅋ
중요한점은, 서버에 설치만 하면 됀다는 겁니다. 그러면 속도에 차이를 눈으로 볼수 있을겁니다.
eAccelerator 홈페이지: http://eaccelerator.net/
인스톨 하는 방법은,
윈도우 에서는: http://www.sitebuddy.com/PHP/Accelerators/eAccelerator_windows_binaries_builds
리눅스 에서는: http://eaccelerator.net/wiki/InstallFromSource
5. Memcached 사용하기
Memcached는 사용하는것이 어려워, 주로 많은 접속률을 예상하는 사이트만 사용하는데요. Memcached는 Cache, session등등을 서버 메모리에 저장 해두는 겁니다. 장점은, 속도가 많이 빨라진다는 것입니다.
Memcached는 서버에 인스톨을 해야 하는데요, 하고 코드에도 사용을 해야 합니다. 실은, 저도 인스톨 하는 방법을 잘 몰라서 ;;
방법은 여기에 적혀 있군요: http://www.php.net/manual/en/memcache.installation.php
CI library는 여기서 받으시구요: http://codeigniter.com/forums/viewthread/72538/
사용하는 법은:
CodeIgniter는 빠르고, MVC를 자랑하는데요, 한가지 중요한건, 많은 model이나 library를 사용하게 돼면, 속도와 메모리 사용도가 빨리 오른다는거죠.
평균 잘만든 CI 페이지는 주로 2MB ~ 4MB 사용하는데요, 만약 5MB~7MB됀다면, 서버에 RAM이 512MB이라면, 73~102명이 한꺼번에 접속하면 서버가 느려지거나, DDoS당한거 처럼 다운됄수도 있습니다.
주로 사람들이 많이 들어오는 사이트들은 여러가지 방법으로 메모리를 줄이고 하는데요, 제일 중요한건 코드 입니다.
1. Autoload를 주의 합시다.
만약에 많은 model이나 library를 autoload에 사용한다면, 메모리에 사용도가 커집니다. 페이지 열면, 모든 model이랑 library들이 로드 됀다는 거죠. 그래서 항상, model이랑 library를 필할때만 로드해서 쓰는것이 좋습니다.
1.
some_function() {
2.
$this
->load->model(
'users_model'
);
3.
$data
=
$this
->users_model->some_function();
4.
$this
->load->view(
'page'
,
$data
');
5.
}
CI에서 제가 자주 쓰는 Profiler란 툴이 있는데요, 그걸 이용하면 많은 정보를 볼수 있습니다.
1.
$this
->output->enable_profiler(TRUE);
만약에 SQL Query가 너무 많아도 메모리, 속도에 문제가 있을수 있습니다.
3. SQL Join 을 사용하여 DB접속률을 줄이기
만약에 여러 테이블에서 정보를 가지고 올때는, SQL join을 사용하면 접속률을 줄일수 있습니다.
1.
$this
->db->select(
'auth_meta.user_id, auth_meta.first_name, auth_meta.last_name, auth_users.email, auth_users.notifications, auth_users.password'
);
2.
$this
->db->from(
'project_users'
);
3.
$this
->db->join(
'auth_users'
,
'project_users.user_id = auth_users.id'
);
4.
$this
->db->join(
'auth_meta'
,
'project_users.user_id = auth_meta.user_id'
);
5.
$this
->db->where(
"project_users.role_id = $role_id"
);
6.
7.
return
$this
->db->get()->result();
4. eAccelerator 사용하기
PHP를 오래 사용하신분들은 아마도 아실겁니다. PHP의 단점은, 코드를 compile 해놓는게 아니라, 볼때마나 compile하는 것입니다. 이렇게 하면, 속도와 메모리 사용도가 많이 오르는데요, 그래서 큰 회사들은 PHP를 안쓸려고 하기도 하죠. ASP.NET같은 경우, compile해서 페이지 로드가 빠른데요, PHP도 같은 기능을 지원해주는 eAccelerator라는 툴이 있습니다.
eAccelerator는 서버에 PHP와 설치 하는것인데요, 설치 해놓으면 5MB~6MB 코드가 갑자기 800KB~2MB로 내려간다는거죠. ㅋㅋ
중요한점은, 서버에 설치만 하면 됀다는 겁니다. 그러면 속도에 차이를 눈으로 볼수 있을겁니다.
eAccelerator 홈페이지: http://eaccelerator.net/
인스톨 하는 방법은,
윈도우 에서는: http://www.sitebuddy.com/PHP/Accelerators/eAccelerator_windows_binaries_builds
리눅스 에서는: http://eaccelerator.net/wiki/InstallFromSource
5. Memcached 사용하기
Memcached는 사용하는것이 어려워, 주로 많은 접속률을 예상하는 사이트만 사용하는데요. Memcached는 Cache, session등등을 서버 메모리에 저장 해두는 겁니다. 장점은, 속도가 많이 빨라진다는 것입니다.
Memcached는 서버에 인스톨을 해야 하는데요, 하고 코드에도 사용을 해야 합니다. 실은, 저도 인스톨 하는 방법을 잘 몰라서 ;;
방법은 여기에 적혀 있군요: http://www.php.net/manual/en/memcache.installation.php
CI library는 여기서 받으시구요: http://codeigniter.com/forums/viewthread/72538/
사용하는 법은:
01.
$this
->load->library(
'cache'
);
02.
//멤케쉬 로드 하기
03.
$this
->cache->useMemcache(
$iptomemcache
,
$port
);
/* 멤케쉬 연결하기 */
04.
$this
->cache->save(
'testkey'
,
'testdata'
, NULL, 3600);
/* "testdata"를 1시간 저장하기. */
05.
echo
$this
->cache->get(
'testkey'
);
06.
07.
//이렇게 해야 "testdata"를 사용할수 있습니다
08.
09.
$this
->cache->useFile();
10.
//etc.
휴.. 많은 정보이긴 한데요, 혹시 도움 필요하신분 댓글로 남겨 주세요. ^^
출처 : http://codeigniter-kr.org/lecture/view/155/page/1/