Hello All,
I am looking to optimize my nginx setup but am new to nginx and some of
the
settings. Currently the webserver is set to just default settings and on
using an forum import script to migrate our forum from another softward
I am
getting “upstream timed out (110: Connection timed out) while reading
response header from upstream”.
Could someone give me some suggestions?
I am running an Amazon ec2 Ubuntu Precise 64 server with the folowing
hardware setup
7.5 GB memory
4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each)
850 GB instance storage
64-bit platform
I/O Performance: High
I am running nginx 1.2.4 and PHP 5.3.10-1ubuntu3.4 (fpm-fcgi)
The website will be running a forum with on average 2000 visitors at any
given time, over 60k members and 4 million posts.
I need help with the following setttings that currently only have the
defaults set.
php-fpm’s php.ini
php-fpm’s pool configuration
nginx.conf
anything else you can suggest.
Performance issues with large forum migrations are usually database
i/o specific; nginx is good because it gets out of the way and sends
the php responses from fpm. Standard php configuration for nginx will
get it up and running, but you will want to tune php to suit the forum
software, and devote most of the system resources to database, which
will consume most of them. When that happens, php waits, fastcgis pile
up, and nginx will hit timeouts waiting for php, which is waiting for
mysql. Make sure mysql has good write performance and plenty of
memory. Beware of expensive forum plugins (use slow logging to spot
horrible queries that make php wait).
Thanks Stephen,
Our DB setup is an external RDS MySql Large DB Instance: 7.5 GB memory,
4
ECUs (2 virtual cores with 2 ECUs each), 64-bit platform, High I/O
Capacity.
There is not much I can do to increase the performance on this but I
don’t
think it’s whats causing the problem.
The web server has no traffic (except for me) and the DB is only being
used
for one other site. Based on its reports, it looks like if we did this
migration at peak traffic time, it still won’t touch 80% of DB usage.
My best suggestion would be to look through your nginx and php settings
to
limit the amount of persistent connections and total connections (both
to
mysql and to your site(s)). The more persistent connections there are,
the
more processes on your server and web browsers accessing the site will
be
able to maintain a single connection each, so limitting those will force
it
to cut off anything inactive or taking too long when it reaches that
limit.
Unfortunately I don’t have the experience to come clsoe to suggesting
good
values for you. My best advice would be to check for general
recommendations
on Google et al., then pick what you feel is safe and adjust over time
until
you feel you hit the right values.
Another option would be to enable gzip within nginx, (add “gzip on;”
without
quotes to nginx.conf), then use Google to research what browsers don’t
support gzip. You can blacklist those browser by adding something
similar
to:
gzip_disable “msie6”;
to nginx.conf, placing all the browser UA strings within quotes. That
way,
nginx will automatically use gzip compression for browsers that are not
blacklisted, which will save bandwidth. There are also various options
you
can add to nginx.conf (I think the default has them commented out by
default) to tweak this further.
There are plenty of other things you can do to optimize things, most of
which you can find quite easily in the nginx wiki and via Google et al.
Search for things like “nginx optimization”, “nginx and php-fpm
optimization”, and “nginx and php-fpm and mysql optimization”.
Posted at Nginx Forum:
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.