Or simply use eAccelerator which does not cause those open calls. Rasmus, is that behaviour by design? I deinstalled APC because of this 'characteristic' last week. It was killing a high-traffic site.
- Sascha On Thu, 2 Feb 2006, Rasmus Lerdorf wrote: > I think the main hint you need is to never use require_once/include_once with > an opcode cache. Those are the only ones that will cause an open() call. You > should only be seeing a single stat() call per file under APC (needed to get > the inode+device hash key for the shared memory lookup). > > -Rasmus > > James M Luedke wrote: > > Hello: > > We have a very high-volume site that runs across a cluster of several > > machines which needs to have access to our back end storage platform, which > > needless to say is very busy. I have been given the task of reducing load to > > the filer. Due to the fact that our application is rather large and includes > > lots of files which reside on our filer, php would be a good place to cut > > down load. > > > > We currently have a rather unique setup. We are running php with > > fast-cgi support via sapi/cgi/cgi_main.c as well as APC for opcode/user > > caching**. This allows us to run php as a daemon which reduces system calls > > and retains persistence with APC. Our setup has been working quite well. > > However, there is one behavior that is less than optimal. > > Whenever one of our pages is accessed, it appears*** that the requested > > file and all included files are opened, which results in several open calls > > to our filer. As I mentioned, we are running APC which seems to be doing a > > nice job of op-code caching. It would be ideal if somehow I could modify php > > to first check APC cache for the pre-compiled opcode before attempting to > > open the file. This would be a huge win on our cluster, since each hit > > currently generates 5-10 open calls. > > > > Now please bear with me because I am new to the Zend / main tree of the > > php source. If my understanding is correct, the basic flow of cgi/php goes > > something like this: > > request > > some variable init. > > module_init <-apc overide compile_file w/my_compile_file > > php_fopen_primary_script(&file_handle TSRMLS_CC); > > php_execute_script(&file_handle TSRMLS_CC); > > VCWD_CHDIR_FILE(primary_file->filename); > > # i think included_files gets opened here someplace > > # i do not understand that magic yet. > > zend_execute_scripts() > > zend_compile_file() > > compile_file || my_compile_file() <-- apc > > # it looks like the std compile_file > > # may do some zend_open cmds here via > > # open_file_for_scaning() > > zend_destroy_file_handle() <-- destroy before execute? > > zend_execute() > > php_request_shutdown() > > FCGX_Finish_r; > > > > I have a few questions: > > 1. When exactly do the files get opened/read? And is this a necessary step > > if you already have the op-code. > > 2. Is it possible to check apc_cache before opening files? If it is > > possible, how/where do you think it could be best implemented? Is there some > > similar interface to the my_compile_file trick used to override > > zend_compile_file by apc? Perhaps something like my_open_file, which I could > > then add support for into the apc module? > > 3. would changing utility_functions->fopen_function; to point to > > my_fopen_function in place of zend_open work. > > > > Any input would be greatly appreciated. > > > > -James > > > > ** ( mod_php and the likes are not an option for us as we have our own > > custom web server which we cannot do without :) ) > > > > *** when i truss one of the php daemon process i can clearly see that > > it opens and reads the requested file. It also opens all the > > included/required files but does not seem read them. > > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php