컴퓨터/노트북/인터넷
IT 컴퓨터 기기를 좋아하는 사람들의 모임방
서버 하드웨어 & 소프트웨어 사양
Zeon E5430 2.66GHz X 2EA 8GB Ram Sandisk X300 256GB SSD Windows 2012 AutoSET 9.0 |
가장 중요한 하드웨어 성능
하드웨어가 뛰어나다면 동시접속자는 일어나지 않을것이다.
동시접속자란
하나의 작업이 처리완료 되기전에 다른작업이 끼어드는 상황을 말하는 것이며 이는 컴퓨터가 빨리 처리해버린다면 동시접속이 일어날 이유가 없다.
동시접속을 처리해야 하는 상황에서 버퍼는 아주 중요하다.
윈도우 최적화
부팅시 [CTRL+ALT+DEL] 없이 시작하기
- 시작=>실행=>gpedit.msc 입력 후 컴퓨터구성=>windows 설정=>보안설정=>로컬정책=>보안옵션=>대화형로그온 ctrl+alt+del 더블클릭 또는 속성으로 들어가 [사용]을 체크한 후 확인을 누릅니다.
윈도우의 자동 로그온 방법
- 부팅시부터 암호 없이 자동적으로 로그온 설정 실행(또는 윈도우키 + R) => netplwiz 또는 control userpasswords2 자동 로그인할 계정을 먼저 선택 후 "사용자 이름과 암호를 입력해야 이 컴퓨터를 사용할 수 있음" 항목의 체크를 제거 설정을 저장하기 위해 확인 또는 적용을 누르면 암호를 입력하는 새로운 창이 나타나는데, 자동 로그온할 해당 계정의 암호를 입력해주면 암호를 미리 저장하여 부팅 후 로그온시 암호입력이 필요없어진다.
Windows Server 2012 인터넷 설정
부팅된 server 2012에서 인터넷을 편하게 하기 위해 "IE 보안 강화 구성" 을 사용안함으로 해주어야 합니다.
개편된 GUI에서 찾기 힘드실까봐 이미지를 포함해 알려드리겠습니다.
로컬 IP 입력으로 서버간 입출력 속도개선하기
웹서버와 DB서버 간 도메인으로 연결할 경우 도메인에서 IP로의 변경작업이 필요하다.
localhost 또한 도메인으로 127.0.0.1 로 변경작업을 수행하므로 차라리 127.0.0.1 로 입력하는 것이 속도개선이 될 수 있다.
컴퓨터 내부적으로도 도움이 되려면
hosts 파일에
127.0.0.1 localhost |
을 입력해두면 속도개선에 많은 도움이 될 것이다.
TIME_WAIT 상태가 늘어나면 서버의 소켓이 고갈되어 커넥션 타임아웃이 발생한다는 얘기를 한다.
서버 방화벽에서 80번 포트 열기
서버 최적화 시키기
1. 압축(Compression)
2. 캐싱(Caching)
3. 버퍼(Buffer)
1,2,3에 해당하는 작업이 충실이 되면 10배 이상의 효율을 가져올 수 있다.
압축은 CPU에 부담을 줄 수 있지만 전송할 데이터의 사이즈를 줄이기 때문에 전송완료에 도움이 된다.
캐싱은 어떤 일을 처리할때 문제를 보고 답을 적느냐? 답만 알고 적느냐의 차이라고 볼 수 있다.
A | B |
1+1= | 1 |
1+2= | 2 |
결과는 1,2 인데, A와 B 중 당연히 A를 처리해야 되는 시간이 오래 걸린다.
결과물이 같다면 미리 계산된 데이터를 저장 해놓고 요청시에 전달만 하면되는 것이 캐싱이다.
아파치 최적화
확장모듈
mod_deflate.so
mod_expires.so
이건 적용해봤으나 제서버에서는 부작용...
XpressEngine에도 mod_disk_cache를 간단히 적용해보았습니다. 주의할 점 실제로 mod_disk_cache를 제대로 적용하기 위해서는 세션 쿠키 등등을 최소화하여 캐싱이 유리하도록 만들고, 익명 사용자에 대해서는 세션쿠키를 쓰지 말고 별도로 처리하면 캐싱이 유리하게 됩니다. 이 문서는 단순히 s-maxage=3으로 세팅하는 매우 간단한 패치이며, mod_disk_cache의 효과를 아파치벤치라는 간단한 벤치마크 툴로 테스트하는 결과를 보여주므로 실제로 사용자가 느낄 수 있는 성능 향상과는 괴리가 있을 수 있습니다.
XpressEngine에 적용하기 XE 버전 1.7.x에 대해서 작성했습니다. 패치로 만드는 대신에 다음과 같이 수동으로 고치는 방식을 설명합니다. 1) classes/display/DisplayHandler.class.php 파일에서 다음 함수를 찾아서 Expires, Cache-Control, Pragma 헤더 삭제.
function _printHTMLHeader() { header("Content-Type: text/html; charset=UTF-8"); #header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); # 제거 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); #header("Cache-Control: no-store, no-cache, must-revalidate"); # 제거 header("Cache-Control: s-maxage=3, max-age=0, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); #header("Pragma: no-cache"); # 제거 }
2) classes/context/Context.class.php 파일에서 session_start()를 찾아서 session_cache_limiter('') 추가
session_start();
이렇게 고치면 끝. 테스트 결과 아파치 벤치(ab -n 1000 -c 3 http://localhost/xe/)로 테스트해보니 다음과 같은 결과가 나왔습니다.
... Concurrency Level: 3 Time taken for tests: 0.433 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 9072075 bytes HTML transferred: 8596000 bytes Requests per second: 2309.36 [#/sec] (mean) Time per request: 1.299 [ms] (mean) Time per request: 0.433 [ms] (mean, across all concurrent requests) Transfer rate: 20459.63 [Kbytes/sec] received
|
모바일보다 PC 재접속시 획기적으로 가속화 된다.
압축은 CPU에 부담을 주지만 사이즈를 줄여 빠른 전송을 할 수 있다.
압축율을 높이는 건 비효율적이므로 필요없다.
아파치 모듈 mod_deflate 압축하기
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|bmp|zip|tar|rar|alz|a00|ace|txt|mp3|mpe?g|wav|asf|wma|wmv|swf|exe|pdf|doc|xsl|hwp|java|c|t?gz|bz2|7z)$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.xx에는 HTML만 압축해서 보냄
BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06~4.08에는 압축해서 보내지 않음
#BrowserMatch bMSIE !no-gzip !gzip-only-text/html # 자신을 Mozilla로 알리는 MSIE에는 그대로 압축해서 보냄
[Apache] mod_expires .htaccess을 수정하여 브라우저 캐싱하기
#CSS, JS 파일 Minify로 한꺼번에 압축해서 전송하기 RewriteRule ^(.*.(css|js))$ ./min/index.php?f=$1 [L]
#아파치 2.4 압축하기 SetOutputFilter DEFLATE #(원본)SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|bmp|zip|tar|rar|alz|a00|ace|txt|mp3|mpe?g|wav|asf|wma|wmv|swf|exe|pdf|doc|xsl|hwp|java|c|t?gz|bz2|7z)$ no-gzip dont-vary SetEnvIfNoCase Request_URI .(?:bmp|zip|tar|rar|alz|a00|ace|txt|mp3|mpe?g|wav|asf|wma|wmv|swf|exe|pdf|doc|xsl|hwp|java|c|t?gz|bz2|7z)$ no-gzip dont-vary BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.xx에는 HTML만 압축해서 보냄 BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06~4.08에는 압축해서 보내지 않음 #BrowserMatch bMSIE !no-gzip !gzip-only-text/html # 자신을 Mozilla로 알리는 MSIE에는 그대로 압축해서 보냄
|
PHP 캐싱
PHP Opcache 속도개선 시키기
php.ini 설정
pcre
PCRE (Perl Compatible Regular Expressions) Support | enabled |
PCRE Library Version | 8.34 2013-12-15 |
Directive | Local Value | Master Value |
---|---|---|
pcre.backtrack_limit | 1000000 | 1000000 |
pcre.recursion_limit | 500000 | 500000 |
http://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit pcre.recursion-limit 항목의 기본 값이 100,000으로 설정되어 있으며 이를 조금 늘려주면 됩니다.
다른 곳에 넣어도 되지만 파일을 수정하거나 기억하기 쉽도록 index.php에 넣어도 됩니다.
@ini_set('pcre.recursion_limit', 500000); 이 코드를 추가하면 됩니다. 다만, 이처럼 설정을 변경하는 것을 허용하지 않을 수 있으므로 일부 호스팅에서는 문제가 해결되지 않을 수 있습니다.
간단한 테스트로 아래 코드를 .php 파일로 저장해 서버에서 열어봤을 때 오류 등 어떤 메시지가 표시되지 않아야 하며 500000이라는 숫자가 보이면 위 코드가 동작하는 것 입니다.
xecenter 레이아웃을 보니 하나의 파일에 너무 많이 것이 들어 있는 것 같습니다. 각 부분별로 분리하면(파일 분리. include) 개선 될 수도 있을 것 같습니다. 확실치는 않네요. 이게 하나 처리 시 적용되는 것인지 프로세스에 제한되는 것인지... |
Mysql
MySQL 5.6.2 labs innodb memcached 설치 및 테스트
http://labs.mysql.com/ 위의 사이트로 가서 "mysql-5.6.2-labs-innodb-memcached-linux2.6-x86_64.tar.gz" 해당 파일을 다운로드 한 이후 설치 하여 테스트 해보았습니다. 16.2 Using MySQL with memcached 설치 이후 가장 기본적으로 버전을 확인 하니 다음과 같습니다. mysql> select version(); +---------------------------------+ | version() | +---------------------------------+ | 5.6.2-labs-innodb-memcached-log | +---------------------------------+ 1 row in set (0.00 sec) 설치 후 바로 사용가능한 엔진은 다음과 같습니다. mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MyISAM | DEFAULT | MyISAM storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec) 총 9개의 엔진이 리스트에 보이며, 활성화 된 엔진은 FEDERATED를 제외한 8개 엔진이 모두 활성화 된 것을 확인 할 수 있습니다. memcache는 이노디비 환경에서만 사용이 가능하다고 하여, 이노디비 버전을 확인 해보았습니다. mysql> select @@innodb_version; +------------------+ | @@innodb_version | +------------------+ | 1.2.2 | +------------------+ 1 row in set (0.00 sec) 기본 설치 이후 확인 되는 플러그인 목록을 보니 다음과 같습니다. mysql> show plugins; +--------------------------+----------+--------------------+---------+---------+ | Name | Status | Type | Library | License | +--------------------------+----------+--------------------+---------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | | mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | +--------------------------+----------+--------------------+---------+---------+ 31 rows in set (0.00 sec) 확인 해보니 memcache가 기본적으로는 지원이 안되는 것으로 보이며, 특이 사항으로는 Innodb 관련하여, 인포메이션 스키마 관련된 항목이 눈에 띄게 늘어난 것을 알 수 있습니다. memchache 플러그인을 설치합니다. mysql> install plugin daemon_memcached soname "libmemcached.so"; mysql> show plugins; +--------------------------+----------+--------------------+-----------------+---------+ | Name | Status | Type | Library | License | +--------------------------+----------+--------------------+-----------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | | mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | daemon_memcached | ACTIVE | DAEMON | libmemcached.so | GPL | +--------------------------+----------+--------------------+-----------------+---------+ 32 rows in set (0.00 sec) 설치가 된 것을 확인 할 수 있습니다. 현재 설치된 데이터 베이스 인스턴스를 확인해봅니다. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) 바이너리 디렉토리의 script-xs 내부를 보면 innodb_memcached_config.sql 파일이 추가된 것을 확인 할 수 있습니다. SQL 스크립트 파일임으로, 스크립트를 실행시켜서, memcache 설치를 완료 합니다. shell> mysql -uroot < script-xs/innodb_memcached_config.sql 스크립트를 실행시키자 innodb_memcache 데이터베이스가 추가된 것을 확인 할 수 있습니다. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | innodb_memcache | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec) 테이블도 확인해 봅니다. mysql> use innodb_memcache; mysql> show tables; +---------------------------+ | Tables_in_innodb_memcache | +---------------------------+ | cache_policies | | config_options | | containers | +---------------------------+ 3 rows in set (0.00 sec) mysql> select * from cache_policies; +--------------+-------------+-------------+---------------+--------------+ | policy_name | get_policy | set_policy | delete_policy | flush_policy | +--------------+-------------+-------------+---------------+--------------+ | cache_policy | innodb_only | innodb_only | innodb_only | innodb_only | +--------------+-------------+-------------+---------------+--------------+ 1 row in set (0.00 sec) mysql> select * from config_options; +-----------+-------+ | name | value | +-----------+-------+ | separator | | | +-----------+-------+ 1 row in set (0.00 sec) mysql> select * from containers; +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+ | name | db_schema | db_table | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key | +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+ | aaa | test | demo_test | c1 | c2 | c3 | c4 | c5 | PRIMARY | +------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+ 1 row in set (0.00 sec) t est 데이터베이스에 demo_test 테이블이 등록된 것을 확인할 수 있습니다. mysql> use test mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | demo_test | +----------------+ 1 row in set (0.00 sec) mysql> select * from demo_test; +----+--------------+------+------+------+ | c1 | c2 | c3 | c4 | C5 | +----+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | +----+--------------+------+------+------+ 1 row in set (0.00 sec) 테스트 데이터 베이스의 내용을 확인하니 다음과 같습니다. 이제 NoSQL을 테스트 하기 위해서, 텔넷으로 접속하고, set명령어와 get명령어를 실행해봅니다. shell> telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. set a11 10 0 9 123456789 STORED get a11 VALUE a11 10 9 123456789 END 파란색 글자 부분만 입력하며, 실행 결과는 위와 같습니다. 다시 mysql 콘솔로 접속하여, 실제 테이블에 반영된 것을 확인해봅니다. mysql> use test mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | demo_test | +----------------+ 1 row in set (0.00 sec) mysql> select * from demo_test; +----+--------------+------+------+------+ | c1 | c2 | c3 | c4 | C5 | +----+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | +----+--------------+------+------+------+ 1 row in set (0.00 sec) 아직 반영이 안된 것을 볼 수 있습니다. 다음 명령어를 실행하여, 현재 세션에서 커밋이 안된 데이터를 읽을 수 있도록 설정합니다. mysql> set session TRANSACTION ISOLATION LEVEL read uncommitted; mysql> select * from demo_test; +-----+--------------+------+------+------+ | c1 | c2 | c3 | c4 | C5 | +-----+--------------+------+------+------+ | a11 | 123456789 | 10 | 1 | NULL | | AA | HELLO, HELLO | 8 | 0 | 0 | +-----+--------------+------+------+------+ 2 rows in set (0.00 sec) set으로 입력한 데이터가 보이는 것을 알 수 있습니다. 위와 같이 5.6버전에서 새롭게 제공하는 memcache에 대해서 설치 테스트를 진행 하였습니다. |
튜닝참고 (일정한 튜닝 이상은 크게 작용하지 않는다.)
#MySQL 메모리 사용량 # + innodb_buffer_pool_size # + key_buffer # + max_connections * (join_buffer + record_buffer + sort_buffer + thread_stack + tmp_table_size) # + max_connections * 2MB
#================================================================ # 튜닝참조 #================================================================ # 1. Opened_tables가 크면 table_open_cache variable의 값이 너무 작은 것일지도 모른다 # 2. key_reads가 크면 key_cach의 값이 너무 작은 것일지도 모른다 # 3. cache hit rate은 key_reads/key_read_requests이다 # 4. Handler_read_rnd가 크면 MySQL의 모든 테이블을 스캔하는 많은 쿼리가 있다거나 key를 적절히 사용하지 않는 조인들이 있을지 모른다 # 5. Threads_created가 크면 thread_cache_size값을 증가시키기를 바랄수도 있다 # 6. Created_tmp_disk_tables이 크면 디스크대신 임시테이블메모리를 얻기위해 tmp_table_size값을 증가시키기를 원할 수있다 # 7. 기본적으로 support-files밑에 my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf 를 기본으로 my.cnf 로 바꾸어 사용하면서 조정한다. # - memory (>=256M)이고 많은 테이블이 있으며, 적당한 클라이언트수에서 최고 성능을 유지하기 위해 # shell> safe_mysqld -O key_buffer=64M -O table_cache=256 -O sort_buffer=4M -O record_buffer=1M & # 이러한 옵션으로 서버를 실행하는데, my-cnf에서 이를 수정하여 사용하면 될 것이다. # - 128M메모리에 테이블이 적지만, 정렬이 많을 때 # shell> mysqld_safe -O key_buffer=16M -O sort_buffer=1M # - 메모리는 적지만 많은 연결이 있을 때 # shell> mysqld_safe -O key_buffer=512k -O sort_buffer=100k -O record_buffer=100k & # 또는 # shell> mysqld_safe -O key_buffer=512k -O sort_buffer=16k -O table_cache=32 -O record_buffer=8k -O net_buffer=1K &
# 8. group by와 order by작업이 가지고 있는 메모리보다 훨씬 클 경우, 정렬 후 row 읽는 것을 빠르게 하기위해 record_buffer값을 증가시켜라
[client] port=3306
[mysql] default-character-set=utf8
[mysqld] #bind-address = 127.0.0.1 port=3306 wait_timeout=30 # 커넥션 최대 대기시간(초) connect_timeout = 5 federated
#2016-07-26 추가 binlog_cache_size = 50M max_binlog_size = 256M expire_logs_days=1
#skip-name-resolve # 역DNS 검색비활성 myisam_use_mmap = 1
basedir=C:/AutoSet9/Server/MySQL5/ datadir=C:/AutoSet9/Server/MySQL5/Data/ init_connect=SET NAMES utf8 character_set_server=utf8 collation_server=utf8_general_ci socket=C:/AutoSet9/Server/temp/mysql.sock
slow_query_log=1 slow_query_log_file=C:/AutoSet9/Server/MySQL5/Data/mysql-slow.log long_query_time=2
character-set-server=utf8 #default-storage-engine=MyISAM # 기본엔진설정 default-storage-engine=INNODB # 기본엔진설정
#back_log = 100 # 동시접속시 대기시킬수있는 커넥션 갯수 #sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" max_connections=300 max_allowed_packet=4M # 요청된 쿼리의 최대길이의 값 max_connect_errors = 1000000
query_cache_type = 1 query_cache_size = 1024M # 쿼리개시 증가 이후 (Innodb buffer pool pages dirty디스크에 저장이 필요한 페이지 수)가 원할하게 작동함.쿼리 결과를 캐싱라기 위해 할당된 메모리크기 2016-11-23 = 256 #query_cache_Limit = 2M # 이 변수 값보다 큰 값은 캐싱이 안됨
#table_cache (MaxFileOpen-MaxConnection-(temporary table 에 사용되는 파일핸들) ) / 2 table_open_cache = 2048 # 각 쓰레드별 오픈할 테이블수 table_definition_cache = 12048 #table_open_cache와 같게 할때는 open tables 값이 빠르게 포화상태에 이르렀지만 10배로 늘린 후 느리게 도달하지만 결국 포화상태...
#[mysql] Created tmp disk tables 디스크 쓰기방지 대안」 http://urin79.com/20662568. tmp_table_size = 1024M # 메모리 내의 임시테이블 크기 초과시 디스크에 저장 max_tmp_tables = 1024 # 2016-09-18 = 64 2016-11-24 = 256 max_heap_table_size = 1024M # MEMORY 테이블의 최대크기
#늘려보고 줄여봤지만 큰 변화 없음 최근16 thread_cache_size = 32 # 2016-09-18 = 16 다쓴 쓰레드를 스레드풀에 저장할 갯수이 값은 bytes 단위 등의 크기가 아니다. open_files_limit=12480 thread_concurrency = 16 # 2016-09-18 = 8 쓰레스 갯수
concurrent_insert=2
skip-external-locking
myisam_max_sort_file_size=1G myisam_sort_buffer_size=16M
# key_buffer_size+(record_buffer+sort_buffer)*max_connections < 실메모리양> #key_buffer_size=256M
key_buffer_size=128M read_buffer_size=4M bulk_insert_buffer_size=4M read_rnd_buffer_size=16M sort_buffer_size=16M #정렬 메모리에 유지되어 4M 이상 하는 것이 좋다. join_buffer_size=16M #정렬 메모리에 유지되어 4M 이상 하는 것이 좋다.
#http://gywn.net/2012/09/mysql-tuning/ #서비스 정책에 따라 다르게 설정하겠지만, 저는 일반적으로 2값으로 세팅합니다. # 0: 초당 1회씩 트랜잭션 로그 파일(innodb_log_file)에 기록 # 1: 트랜잭션 커밋 시 로그 파일과 데이터 파일에 기록 # 2: 트랜잭션 커밋 시 로그 파일에만 기록, 매초 데이터 파일에 기록 # 1=트랜젝션 실행할때마다 로그 파일에 기록되고 디스크 플러시가 실행 innodb_data_home_dir="C:/AutoSet9/Server/MySQL5/Data/" innodb_flush_log_at_trx_commit=2 innodb_log_buffer_size=2M innodb_log_buffer_size=128M
#InnoDB에게 할당하는 버퍼 사이즈로 50~60%가 적당하며, 지나치게 많이 할당하면 Swap이 발생할 수 있습니다. innodb_file_per_table=1 # 테이블 단위로 테이블스페이스 할당, 활성시 확장자 .ibd 파일이생성됨 innodb_buffer_pool_size=4G #innodb_additional_mem_pool_size = 4M # 데이터 디렉토리 정보와 내부 데이타 구조를 저장하는 메모리 풀의 크기
#https://blog.marceloaltmann.com/en-warm-up-innodb-buffer-pool-pt-esquentando-o-innodb-buffer-pool/
innodb_buffer_pool_dump_at_shutdown = 1 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_load_abort=ON
#트랜잭션 로그를 기록하는 파일 사이즈이며,32M 128MB ~ 256MB가 적당합니다. innodb_log_file_size=256M
#이중으로 쓰기 버퍼를 사용하는지 여부를 설정하는 변수로 활성화 시 innodb_doublewrite 공간에 기록 후 데이터 저장합니다. 저는 활성화합니다. # on off에 따라.... http://urin79.com/blog/20660042 오류발생됩니다. innodb_use_sys_malloc = 0 innodb_flush_method = normal
#강제로 InnoDB 복구하기(http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01&m_no=21875&cat1=14&cat2=422&cat3=442&lang=k)
#innodb_thread_concurrency 값은 0으로 하는것이 효율적/시스템이 가용할수 있는 만큼 최대로 사용한다는 뜻입니다. innodb_thread_concurrency=16
[myisamchk] key_buffer_size = 256M sort_buffer_size = 8M read_buffer = 8M write_buffer = 8M |
Created tmp disk tables 디스크 사용량이 많아질 경우 대처방법
XE튜닝
익스프레스엔진(XE) 사용시 굳이 minify 캐싱을 할 필요가 없다.
(중복되므로 버벅 거리는 현상이 일어남)
하지만 RSS 문제로 Gzip을 풀었다면 minify를 반드시 설치해라.
스킨선택이 정말 중요.
스킨에 따라 용량이 줄어듬.
스크립트는 꼭 필요한 경우가 아니면 제일 하단에 넣는다.
특히나 구글 애널리틱스 같은 스크립트들...머 구글광고 같은건 느려도 감안해야죠.
하나씩 수정해 나가면서 나의 웹문서가 얼마나 작아졌는지 하나씩 점검해 나가야 합니다.
웹속도측정사이트 : https://gtmetrix.com/reports/urin79.com/KCSlTUO3
요약 (내 사이트가 느리다 싶으면)
xetown의 프렌다님 글
1. 레이아웃 등에서 불러오는 JS파일을 최하단으로 내려라.
(보여져야 할 부분이 미리 보여지고 기능적인 부분은 그 후에 불러오게 됩니다.)
2. 레이아웃 헤더 스크립트에 있는 내용은 직접 레이아웃 최하단에 넣던가, 관리자페이지 시스템 설정의 하단(footer) 스크립트로 이동
3. 웹폰트 등을 사용하고 있다면 가능한 경량화 시키고 혹은 속도가 빠른 CDN으로 물려라
4. 오브젝트 캐시 사용 , 스크립트 자동 압축 등의 기능을 적절히 세팅 (XE의 경우 기진곰 님의 ZipperUpper! 으로 대체)
5. 레이아웃 등에서 실제 사용하지도 않는데 불러오는 *.JS 혹은 스크립트 등은 버려라
테스트 홈피에 XE 1.8.19 버전을 설치 후 우연히 RSS FEED CHECK를 했더니 예전에 나오던 오류가 없어졌습니다.
This is a valid RSS feed.
체크해보니 위와 같은 메시지가 나오네요.
그래서 나머지 홈피에도 적용했습니다.
근데 Gzip 풀려서 deflate, minify 별도로 적용했는데 중복 압축은 시스템을 더 느리게 하는 요인이 되지 않을지,,,
XE <title>제목 - 사이트명</title> 으로 변경방법
이게 제일 확실하다?/html/xe/modules/board/board.view.php |
XE 반응형 모바일 메타태그 삽입하기
xe설치주소commontplcommon_layout.html
<!DOCTYPE html>
<html lang="{str_replace('jp','ja',$lang_type)}">
<head>
<!-- META -->
<meta charset="utf-8">
<meta name="Generator" content="XpressEngine">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,minimum-scale=1.0" />
<block loop="Context::getMetaTag() => $no, $val">
<meta http-equiv="{$val['name']}"|cond="$val['is_http_equiv']" name="{$val['name']}"|cond="!$val['is_http_equiv']" content="{$val['content']}">
</block>
<!-- TITLE -->
해당주소의 파일을 찾아 붉은색라인을 붙여넣으면 끝!
참 쉽죠잉.
memcached + XE슈퍼캐시모듈로 엄청난 속도 개선하기
http://code.jellycan.com/files/memcached-1.2.5-win32-bin.zip
http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip
http://downloads.northscale.com/memcached-win32-1.4.4-14.zip
http://downloads.northscale.com/memcached-win64-1.4.4-14.zip
http://downloads.northscale.com/memcached-1.4.5-x86.zip
http://downloads.northscale.com/memcached-1.4.5-amd64.zip
In versions earlier than 1.4.5, memcached can install itself as a service. However, the ability to run memcached as a service is removed since version 1.4.5. Therefore, the installation steps are divided into two categories, part A for memcached prior to version 1.4.5. and part B for memcached version 1.4.5 and later.
A) Installation of memcached < 1.4.5:
- Extract the memcached windows binary to any directory.
- In versions earlier than 1.4.5, memcached can install itself as a service. Run a command prompt with elevated privileges, and type:
c:memcachedmemcached.exe -d install
* Replace c:memcachedmemcached.exe with the actual path of your installation.
- Then, start or stop the memcached service with the following command:
c:memcachedmemcached.exe -d start c:memcachedmemcached.exe -d stop
- To change the configuration of memcached, run regedit.exe and navigate to the key "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmemcached". Suppose you wish to increase the memory limit of memcached, edit the value of ImagePath to the following:
"c:memcachedmemcached.exe" -d runservice -m 512
* Besides '-m 512', you may also append other memcached parameters to the path. Run "c:memcachedmemcached.exe -h" to view the list of available parameters.
- Meanwhile, to uninstall the memcached serivce, run the following command:
c:memcachedmemcached.exe -d uninstall
B) Installation of memcached >= 1.4.5:
- Extract the memcached windows binary to any directory.
- In version 1.4.5 or later, memcached cannot run as a service. It must be started as a normal process using the task scheduler. To configure the memcached process to run automatically every time windows start, run a command prompt with elevated privileges, and type the following:
schtasks /create /sc onstart /tn memcached /tr "'c:memcachedmemcached.exe' -m 512"
* Replace c:memcachedmemcached.exe with the actual path of your installation.
** Besides '-m 512', you may also append other memcached parameters to the path. Run "c:memcachedmemcached.exe -h" to view the list of available parameters. - Meanwhile, to remove the scheduled memcached task, run the following command:
schtasks /delete /tn memcached
Integrating with PHP
To interface with memcached in PHP, you need to install the memcache extension for PHP:
- Check that your PHP extension folder has the file php_memcache.dll. If not, download the file from https://pecl.php.net/package/memcache (select the windows dll file), and place it in the PHP extension folder.
- Add the following line in php.ini to enable the memcache extension.
extension=php_memcache.dll - Create this simple php script file to test that it works.
<?php $memcache = new Memcache; $memcache->connect('localhost', 11211) or die ("Could not connect"); $version = $memcache->getVersion(); echo "Server's version: ".$version."<br/>n"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server"); echo "Store data in the cache (data will expire in 10 seconds)<br/>n"; $get_result = $memcache->get('key'); echo "Data from the cache:<br/>n"; var_dump($get_result); ?>
Integrating with Python
To interface with memcached in Python, you need to install the memcached client for Python.
- Execute one of the following command to install the memcached client. The first is for Python 2.x while the second is for Python 3.x.
pip install python-memcached pip install python3-memcached
- Create this simple python script to test that it works.
import memcache mc = memcache.Client(['127.0.0.1:11211'], debug=0) mc.set("some_key", "Some value") value = mc.get("some_key") mc.set("another_key", 3) mc.delete("another_key") mc.set("key", "1") # note that the key used for incr/decr must be a string. mc.incr("key") mc.decr("key")
Memcached statistics
To view the statistics for memcached, bring up a telnet connection to memcached by the command:
telnet 127.0.0.1 11211
Then, type stats and enter.
Here is an explanation of the different memcached stats.
XE 조언
https://www.xpressengine.com/tip/23132669
Mysql 튜닝조언
http://2cpu.co.kr/bbs/board.php?bo_table=PDS&wr_ 9750
아파치 최적화
http://m.blog.naver.com/kmk1030/150141633528
[Reference] : Progress, 「서버 최적화 시키기(APACHE, PHP, MYSQL, XE 압축&캐싱&버퍼)」 http://urin79.com/?m blog&document_srl=20654635.
컴퓨터/노트북/인터넷
IT 컴퓨터 기기를 좋아하는 사람들의 모임방
번호 | 분류 | 제목 | 조회 수 | 날짜 |
---|---|---|---|---|
공지 | 뉴스 |
구글 최신 뉴스
![]() |
1384 | 2024.12.12 |
공지 | 사랑LOVE 포인트 만렙! 도전 | 4618 | 2025.03.19 | |
공지 | 🚨(뉴비필독) 전체공지 & 포인트안내 2 | 25843 | 2024.11.04 | |
공지 | URL만 붙여넣으면 끝! 임베드 기능 | 20427 | 2025.01.21 | |
10639 | 일반 | Synology의 4 베이 NAS 장비 "DiskStation DS416j" | 1456 | 2016.02.08 |
10638 | 일반 | 태블릿 PC의 충전을하면서 주변 기기를 사용할 수있는 OTG 지원 USB 허브 | 1434 | 2016.02.08 |
10637 | 일반 | 카페베네 상장 난항에 투자자 눈물 | 776 | 2016.02.15 |
10636 | 일반 | 주식, 욕심은 화를 부르고. 그 화는 고스란히 가족들에게 짜증을 부릴겁니다 | 789 | 2016.02.22 |
10635 | 일반 | 원익IPS 추천합니다 | 676 | 2016.02.22 |
10634 | 일반 | 장이 너무 안좋네요 ㅜㅜ | 707 | 2016.02.22 |
10633 | 일반 | 주식투자와 관련된 주식명언 | 999 | 2016.02.22 |
10632 | 일반 | i5-6600 i5-6500 비교 1 | 1434 | 2016.02.22 |
10631 | 일반 | ssd좀봐주세요 2 | 906 | 2016.02.27 |
10630 | 일반 | 크라운제과 어떻게 보시나요? | 458 | 2016.02.28 |
10629 | 일반 | 흑자예상하며 기다린보람이 있군 | 471 | 2016.02.28 |
10628 | 일반 | 세계 주식 주요 지수 보는곳 입니다.모르시는분들을 위해 | 646 | 2016.02.28 |
10627 | 일반 | 한 2월 말쯤 총선테마가 시작될걸로 예상합니다. | 562 | 2016.02.28 |
10626 | 일반 | 대중관계 악화로 중국에서 돈버는 기업들 급락이네요 | 684 | 2016.02.28 |
10625 | 일반 | 주식 생초보인데 알려주실수 있으신가요? | 515 | 2016.02.28 |
10624 | 일반 | 11시정도만 잘 넘기면 될거같은데.. | 478 | 2016.02.28 |
10623 | 일반 | 요즘 한종목에 꽂혀서 분할매수하는데요. | 565 | 2016.02.28 |
10622 | 일반 | 본인 명의로 핸드폰 두개 개설 하면 문제 생기나요? 1 | 1154 | 2016.03.01 |
10621 | 일반 | 단말기대금 일시불납 가능한가요? 1 | 781 | 2016.03.05 |
10620 | 일반 | 노트4 배터리 공유?? 1 | 1749 | 2016.03.05 |
10619 | 일반 | 금호타이어 어떻게 보시나요? | 650 | 2016.03.05 |
10618 | 일반 | 해외에서 사용하던 도메인을 구입했는데 헉.. | 568 | 2016.03.09 |
10617 | 일반 | 축구 페널티킥 선방 탑10 | 469 | 2016.03.12 |
10616 | 일반 | SSD의 성능을 유지하기위한 유지 관리 기술 | 1068 | 2016.03.15 |
10615 | 일반 | 저렴한 Skylake 버전 Xeon 마더보드 'GA-X150M-PRO ECC」 | 874 | 2016.03.15 |
10614 | 일반 | G5 vs S7 1 | 626 | 2016.03.18 |
10613 | 일반 | 스테레오믹스 소리가 안납니다 1 | 1104 | 2016.03.19 |
10612 | 일반 | 스피커를 항상 켜 놓는데요. 노이즈??? 소리가 납니다. 1 | 850 | 2016.03.19 |
10611 | 일반 | M2 메모리 추천 1 | 911 | 2016.03.19 |
10610 | 일반 | 모니터 단자 HDMI, DP & 오디오 관련 문의 1 | 865 | 2016.03.19 |