Hi all I'm currently moving a TG2.1 app to production and have been doing some load testing.
I have 10 Instances of the app running behind an nginx server using reverse proxy technique. When I reach about 50-60 concurrent users the application becomes incredibly slow, responding sometimes at 40-50 seconds response time. My static files have no problem scaling and i'm getting 150ms response time for 0-100 users no problem as i'm serving them through nginx. Here is my production.ini file, I'd appreciate it if you could review it and point out whether i'm overloading something.... Thanks in Advance, Rotem # # #### - Pylons development environment configuration # # The %(here)s variable will be replaced with the parent directory of this file # # This file is for deployment specific config options -- other configuration # that is always required for the app is done in the config directory, # and generally should not be modified by end users. [DEFAULT] debug = false # Uncomment and replace with the address which should receive any error reports #email_to = [email protected] smtp_server = localhost error_email_from = paste@localhost [server:main] use = egg:Paste#http host = 127.0.0.1 port = %(http_port)s [sa_auth] cookie_secret = XXX-XXX-XXXX [app:main] use = egg:appname full_stack = true #lang = ru cache_dir = %(here)s/data beaker.session.key = appname beaker.session.secret = XXX-XXX beaker.cache.type = memory # If you'd like to fine-tune the individual locations of the cache data dirs # for the Cache data, or the Session saves, un-comment the desired settings # here: #beaker.cache.data_dir = %(here)s/data/cache #beaker.session.data_dir = %(here)s/data/sessions # pick the form for your database # %(here) may include a ':' character on Windows environments; this can # invalidate the URI when specifying a SQLite db via path name # sqlalchemy.url=postgres://username:password@hostname:port/ databasename sqlalchemy.url=mysql://appname:jdhfprv@localhost:3306/appname # If you have sqlite, here's a simple default to get you started # in development #sqlalchemy.url = sqlite:///%(here)s/devdata.db #echo shouldn't be used together with the logging module. sqlalchemy.echo = false sqlalchemy.echo_pool = false sqlalchemy.pool_recycle = 3600 # This line ensures that Genshi will render xhtml when sending the # output. Change to html or xml, as desired. templating.genshi.method = xhtml # if you are using Mako and want to be able to reload # the mako template from disk during the development phase # you should say 'true' here # This option is only used for mako templating engine # WARNING: if you want to deploy your application using a zipped egg # (ie: if your application's setup.py defines zip-safe=True, then you # MUST put "false" for the production environment because there will # be no disk and real files to compare time with. # On the contrary if your application defines zip-safe=False and is # deployed in an unzipped manner, then you can leave this option to true templating.mako.reloadfromdisk = true # the compiled template dir is a directory that must be readable by your # webserver. It will be used to store the resulting templates once compiled # by the TemplateLookup system. # During development you generally don't need this option since paste's HTTP # server will have access to you development directories, but in production # you'll most certainly want to have apache or nginx to write in a directory # that does not contain any source code in any form for obvious security reasons. templating.mako.compiled_templates_dir = %(here)s/data/templates # WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* # Debug mode will enable the interactive debugging tool, allowing ANYONE to # execute malicious code after an exception is raised. #set debug = true # Logging configuration # Add additional loggers, handlers, formatters here # Uses python's logging config file format # http://docs.python.org/lib/logging-config-fileformat.html #turn this setting to "min" if you would like tw to produce minified #javascript files (if your library supports that) toscawidgets.framework.resource_variant=debug [loggers] keys = root, appname, sqlalchemy, auth [handlers] keys = console [formatters] keys = generic # If you create additional loggers, add them as a key to [loggers] [logger_root] level = INFO handlers = console [logger_appname] level = DEBUG handlers = qualname = appname [logger_sqlalchemy] level = WARN handlers = qualname = sqlalchemy.engine # "level = INFO" logs SQL queries. # "level = DEBUG" logs SQL queries and results. # "level = WARN" logs neither. (Recommended for production systems.) # A logger for authentication, identification and authorization -- this is # repoze.who and repoze.what: [logger_auth] level = WARN handlers = qualname = auth # If you create additional handlers, add them as a key to [handlers] [handler_console] class = StreamHandler args = (sys.stderr,) level = NOTSET formatter = generic # If you create additional formatters, add them as a key to [formatters] [formatter_generic] format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] % (message)s datefmt = %H:%M:%S -- You received this message because you are subscribed to the Google Groups "TurboGears" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/turbogears?hl=en.

