在PostgreSQL运行的时候,通过对其代码进行跟踪,发现不断有进程被生成,访问InitFileAccess,过了大约20秒左右,就死掉了。
这个过程反复地进行着,进程号不断增加。
我对其进一步进行了跟踪,发现似乎是这些进程是为了 autovacuum 而被创建出来,然后自己消亡的。
在PostgreSQL9.2源代码中加入:
InitFileAccess(void) { fprintf(stderr,"In %s ...by Process %d\n", __FUNCTION__,getpid()); fprintf(stderr,"----------------------------------------------------\n\n"); ... }
void BaseInit(void) { fprintf(stderr,"In %s ...by Process %d\n", __FUNCTION__,getpid()); /* * Attach to shared memory and semaphores, and initialize our * input/output/debugging file descriptors. */ InitCommunication(); DebugFileOpen(); /* Do local initialization of file, storage and buffer managers */ InitFileAccess(); smgrinit(); InitBufferPoolAccess(); }
NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]) { ... fprintf(stderr,"In %s ...by Process %d\n", __FUNCTION__,getpid()); /* Early initialization */ BaseInit(); ... proc_exit(0); /* done */ }
NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) { ... fprintf(stderr,"In %s ...by Process %d\n", __FUNCTION__,getpid()); /* Early initialization */ BaseInit(); ... /* All done, go away */ proc_exit(0); }
执行结果如下:
[postgres@lex bin]$ ./pg_ctl -D ../data start server starting [postgres@lex bin]$ In BaseInit ...by Process 4804 In InitFileAccess ...by Process 4804 ---------------------------------------------------- LOG: database system was shut down at 2013-05-24 14:29:46 CST In BaseInit ...by Process 4805 In InitFileAccess ...by Process 4805 ---------------------------------------------------- In BaseInit ...by Process 4806 In InitFileAccess ...by Process 4806 ---------------------------------------------------- In BaseInit ...by Process 4807 In InitFileAccess ...by Process 4807 ---------------------------------------------------- LOG: autovacuum launcher started In AutoVacLauncherMain ...by Process 4808 In BaseInit ...by Process 4808 In InitFileAccess ...by Process 4808 ---------------------------------------------------- LOG: database system is ready to accept connections In AutoVacWorkerMain ...by Process 4816 In BaseInit ...by Process 4816 In InitFileAccess ...by Process 4816 ---------------------------------------------------- In AutoVacWorkerMain ...by Process 4823 In BaseInit ...by Process 4823 In InitFileAccess ...by Process 4823 ---------------------------------------------------- In AutoVacWorkerMain ...by Process 4830 In BaseInit ...by Process 4830 In InitFileAccess ...by Process 4830 ----------------------------------------------------