私は主に認証されたユーザーが使用するWebアプリケーションに取り組んでいます。 WebアプリケーションはFeedsモジュールを使用してCSVファイルからレコードをインポートします。このデータを保存するために選択されたのは、MySQLではなく書き込みの方がはるかに高速であるためです。アプリケーションは、毎日何千ものレコードを非常に高速にインポートしています。レコードはユーザーに参照され、ユーザーがログインすると、情報を参照できます。アプリケーションは、モバイルアプリのAPIとしても使用されます。
サーバーとして17GBのAWS EC2インスタンスがあります。
Varnishは、匿名ユーザー向けのコンテンツを完全に提供する機能をインストールします。 1秒あたり約3000〜4000リクエストを取得していますが、これで十分です。
私の問題は、認証されたユーザーのベンチマークを行うときに、jsonコンテンツのみのAPIページで、1秒あたり24のリクエストしか取得しないことです。また、他のページでは、1秒あたり9〜11リクエストのようになります。以下は、Apacheベンチマークの出力です。
Concurrency Level: 100
Time taken for tests: 9.154 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 1790900 bytes
HTML transferred: 1731600 bytes
Requests per second: 10.92 [#/sec] (mean)
Time per request: 9154.469 [ms] (mean)
Time per request: 91.545 [ms] (mean, across all concurrent requests)
Transfer rate: 191.05 [Kbytes/sec] received
memcache_storage モジュールを使用してMemcacheがインストールされています。何らかの理由で、 memcache ではなく、このモジュールを使用すると1秒あたりの要求がわずかに高くなります。 4GbはMemcacheキャッシュとして設定されます。 Memcacheの統計出力の一部を次に示します。
Cache Information
Current Items(total) 10730 (95109)
Hits 644064
Misses 74324
Request Rate (hits, misses) 1.44 cache requests/second
Hit Rate 1.29 cache requests/second
Miss Rate 0.15 cache requests/second
Set Rate 0.19 cache requests/second
APCもインストールされ、完全に機能します。
多くのモジュールをインストールしていません:
芯
ブロック、フィールド、フィールドsqlストレージ、フィールドUI、ファイル、フィルター、画像、リスト、ロケール、メニュー、ノード、数、オプション、パス、システム、分類法、テキスト、ユーザー、
貢献する
コンテンツアクセス、ワニス、ctools、eck、フィード、フィードui、改ざんフィード、改ざんui、メール、フィールド権限、hsmフィールド、ノード参照、参照、ユーザー参照、jquery update、mongodb、mongodbストレージ、mongodbウォッチドッグ、エンティティapi 、メッセージを無効にする、画像URLフォーマッタ、ジョブスケジューラ、ライブラリ、クイックタブ、クイックタブスタイル、apc、eckエンティティキャッシュ、エンティティキャッシュ、memcacheストレージ、サービス、レストサーバー、エンティティフィールドクエリビュー、ビュー、json、ビューui。
Develの出力については、通常、次のような結果が得られます。 (この出力は、ページを更新した後のものです)
Executed 57 queries in 10.79 ms. Queries exceeding 5 ms are highlighted. Page execution time was 167.27 ms. Memory used at: devel_boot()=1.36 MB, devel_shutdown()=13.96 MB, PHP peak=14.25 MB.
_drupal_session_writeクエリは常に最も長く、8ミリ秒未満で実行されることはなく、下の出力のように500ミリ秒に達することもあります。
Executed 57 queries in 607.49 ms. Queries exceeding 5 ms are highlighted. Page execution time was 2395.87 ms. Memory used at: devel_boot()=1.36 MB, devel_shutdown()=13.96 MB, PHP peak=14.25 MB.
これらは私のPHP settings.phpの設定です
/**
*MongDB configuration
*/
$conf['mongodb_connections'] = array(
// Connection name/alias
'default' => array(
// Omit USER:PASS@ if Mongo isn't configured to use authentication.
'Host' => 'mongodb://localhost',
// Database name
'db' => 'mydb',
),
);
$conf['mongodb_watchdog'] = 'mydb_logs';
$conf['field_storage_default'] = 'mongodb_field_storage';
/**
*Memcached
*/
$conf['cache_backends'][] = 'sites/all/modules/memcache_storage/memcache_storage.inc';
$conf['cache_default_class'] = 'MemcacheStorage';
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
$conf['session_inc'] = 'sites/all/modules/memcache_storage/includes/session.inc';
$conf['lock_inc'] = 'sites/all/modules/memcache_storage/includes/lock.inc';
/**
*Varnish
*/
$conf['cache_backends'][] = 'sites/all/modules/varnish/varnish.cache.inc';
$conf['cache_class_cache_page'] = 'VarnishCache';
/**
* Add APC Caching.
*/
$conf['cache_backends'][] = 'sites/all/modules/apc/drupal_apc_cache.inc';
$conf['cache_class_cache'] = 'DrupalAPCCache';
$conf['cache_class_cache_bootstrap'] = 'DrupalAPCCache';
My.cnfファイルの構成。
key_buffer_size = 12M
query_cache_size = 32M
query_cache_limit = 2M
query_cache_type = 1
# InnoDB caches.
innodb_buffer_pool_size = 500M
innodb_flush_method = O_DIRECT
max_connections = 75
table_cache = 96
sort_buffer_size = 12M
tmp_table_size = 12M
この時点で本当に迷っています。パフォーマンスとスケーラビリティに関する記事をたくさん読んだので、言及されていることのほとんどを実行したようですが、まったく機能していないようです。サーバーがこの数値で本当に速くクラッシュするように感じるので、私はストレスを感じています。誰かがアドバイスをくれるといいのですが。
敬具。
質問が具体的すぎるため、まだ回答はありませんでした。それをいくつかの正確な質問に分けて、正確な答えが得られるようにすることをお勧めします。誰かが完璧な答えをここで提供できる方法はありません。
しかし、少し手助けしてみましょう。
あなたへの私の主なアドバイスは、物事をシンプルに保ち、できるだけ多くの複雑さの層を取り除き、そこから始めることです。 https://drupal.org/project/memory_profiler モジュールを使用して、どのページが非常に遅いかを確認するか、XHprofプロファイリングを使用して次のレベルに進みます( そのためのモジュールがあります! )