static void mainInitialize(void)
{
//...
//do nothing ...
comm_select_postinit();
//configure_once代表是否曾经调用过mainInitialize()函数
//1表示之前调用过
if (!configured_once)
//do nothing ...
disk_init(); /* disk_init must go before ipcache_init() */
//域名和IP地址的缓存初始化,用来缓存dns正反解得到的ip
//"ipcache_size"ip缓存的entry数量
//初始化IpcacheStats,一个统计数据的结构(如requests/replies/hits/misses等数据)
//初始化lru_list,是一个双向链表
//初始化static_addrs,_ipcache_addrs结构
//设置ipcache_high和ipcache_low
//创建一个哈希表ip_table,缓存ip
//cachemgrRegister注册获取ipcache统计数据的action
//分配内存池到MemPools的相应位置
ipcache_init()
//fqdn缓存初始化
//"fqdncache_size"域名全称缓存的entry数量
//初始化类似ipcache_init(),初始化FqdncacheStats,创建一个哈希表fqdn_table,并注册获取统计数据的action,分配内存池到MemPools的相应位置
fqdncache_init();
//解析host_file指令指定的文件,一般linux下是"/etc/hosts",并把ip和host放入对应的ip_table和fqdn_table
parseEtcHosts();
//使用外部(由cache_dns_program指定)或者内部的dns
//调用helperOpenServers()启动外部程序,并建立进程间通信通道
//cachemgrRegister注册获取dns统计数据的action
//...
//同上,启动redirect_program指令指定的外部程序,注册获取redirect统计数据的action
redirectInit();
//同上,storeurl_rewrite_program指令
storeurlInit();
//同上,location_rewrite_program指令
locationRewriteInit();
errorMapInit();
//"auth_param"指令
//代理认证初始化
authenticateInit(&Config.authConfig);
//"external_acl_type"指令
//外部acl辅助器
externalAclInit();
//"external_refresh_check"指令
//外部辅助器,来决定是否refresh stale response
refreshCheckInit();
//打开useragent_log指令指定的logfile
useragentOpenLog();
//打开"referer_log"指令指定的logfile
refererOpenLog();
//初始化http header中各个域的相关数据结构
//设置ListHeadersMask,ReplyHeadersMask,RequestHeadersMask的位
//初始化HttpHeaderStats,并注册一个获取HttpHeaderStats信息的action
//must go before any header processing (e.g. the one in errorInitialize)
httpHeaderInitModule();
//This function finds the error messages formats, and stores them in error_text[];
errorInitialize();
//打开"access_log","cache_access_log"指令指定的logfile
accessLogInit();
//...
//第一次调用mainInitialize()
if(!configured_once) {
//调用cachemgrRegister()注册回调函数,如cachemgrShutdown,cachemgrReconfigure
//cachemgrRegister()把action及它的回调函数加入到ActionTable里面
cachemgrInit();
//统计数据初始化
//注册获取各种统计数据的action
statInit();
//store_table哈希列表,cache摘要,swap dir等初始化,
storeInit();
//读取mine文件,把里面的类型存入mime table
mimeInit(Config.mimeTablePathname);
//持久化连接table初始化
//client_pconn_hist,server_pconn_hist初始化
//给pconn_data_pool,pconn_fds_pool分配内存
pconnInit();
//初始化refreshCounts中每个协议(HTTP, ICP, HTCP, on store, Cache Digests)
//初始化DefaultRefresh (_refresh_t结构)
refreshInit();
//调用clientOpenListenSockets()创建并监听socket,socket的地址由"http_port"指定
//把socket的fd注册到事件监听(如epoll),并注册请求处理函数
//调用icpConnectionsOpen()打开ICP socket(incoming和outgoing, 都是udp),并添加到事件监听和处理函数
serverConnectionsOpen();
//ICP
neighbors_init();
//添加一些信号的处理函数
//...
//检查MemPools[]的所有entry是否已经初始化
//...
//添加事件
//...
configured_once = 1;
}
}
void storeInit(void)
{
//初始化一个大小为16个unsigned char的数组null_key
storeKeyInit();
//计算store bucket的个数store_hash_buckets
storeInitHashValues();
//创建store_table,bucket个数是store_hash_buckets
store_table = hash_create(storeKeyHashCmp, store_hash_buckets, storeKeyHashHash);
//Create removal policy instance
mem_policy = createRemovalPolicy(Config.memPolicy);
//Cache摘要(Cache Digest)
//Cache摘要基于由Pei Cao首先发布的一项技术,叫做摘要缓存。基本思路是用一个Bloom filter来表现cache内容。邻居cache下载其他每个cache的Bloom filter(也即摘要)。然后,通过查询摘要来决定某个URI是否在邻居的cache里。
//相对于ICP,cache摘要以空间交换时间。ICP查询浪费时间(延时),cache摘要浪费空间(内存,磁盘)。在squid中,邻居的摘要完全存放在内存里。在一个典型的摘要里,每百万目标需要大约625KB的内存。
//digest_generation on #开启.本参数指令控制squid是否产生自己的cache摘要
//创建cache摘要store_digest并注册获取cache摘要的action
storeDigestInit();
//打开cache_store_log指定的logfile
storeLogOpen();
stackInit(&LateReleaseStack);
//添加一个event到tasks队列
eventAdd("storeLateRelease", storeLateRelease, NULL, 1.0, 1);
//调用SwapDir结构的init()函数来初始化swap fs的bitmap。如aufs就是storeAufsDirInit()
storeDirInit();
storeRebuildStart();
//注册actions
cachemgrRegister("storedir", "Store Directory Stats", storeDirStats, 0, 1);
cachemgrRegister("store_check_cachable_stats", "storeCheckCachable() Stats", storeCheckCachableStats, 0, 1);
cachemgrRegister("store_io", "Store IO Interface Stats", storeIOStats, 0, 1);
}
分享到:
相关推荐
Squid函数流程图(Squid函数流程.vsd)可能详细描绘了这一过程。 4. **对象管理**:Squid中的每个HTTP对象都有一个完整的生命周期,包括创建、存储、更新和删除。对象管理涉及内存分配、磁盘存储和内存映射等技术。...
### Squid资源讲解及分析 #### 一、概述 Squid是一款广泛使用的开源代理服务器软件,主要用于缓存网络内容并提高访问速度。通过代理功能,Squid能够减轻网络带宽的压力,同时还能增强安全性。本文将详细介绍Squid...
### 网络代理缓存Squid存储系统分析 #### 概述 本文主要针对“网络代理缓存Squid存储系统分析.pdf”这一资料进行了深入解析,着重介绍了Squid存储系统的实现机制,包括Squid的软件结构、工作机制、存储系统的设计...
SQUID是一个开源的代理缓存服务器,常用于加速网络访问速度,降低网络带宽消耗,提高网络性能。本文将详细介绍SQUID的基本原理、安装配置步骤及其在Linux环境下的应用。 **SQUID原理** SQUID的核心功能是作为HTTP...
#### 六、实战案例分析 假设有一个企业网络环境,内部有大量的员工经常访问相同的外部网站和资源。在这种场景下,部署 Squid Cache 能够带来显著的好处: - **减少外部带宽消耗**:由于 Squid 会缓存经常访问的...
4. **日志管理**:查看和分析Squid的日志文件,监控网络流量和用户活动。这有助于识别潜在的问题,如高流量源或恶意活动。 5. **性能监控**:实时查看Squid的运行状态,包括缓存命中率、内存使用情况、网络带宽使用...
Squid是一款广泛应用的开源代理缓存服务器,它可以帮助提高网络访问速度,减轻服务器负载。透明代理则是指用户在使用网络时,无感知地通过代理服务器进行访问。而Squid与ICAP(Internet Content Adaptation Protocol...
本文将针对常见的“Squid 启动错误”进行深入分析,并提供具体的解决方案。 #### 常见错误类型及原因分析 ##### 1. DNS 名称查找测试失败 (FATAL:ipcache_init:DNS namelookup tests failed.) **错误描述**: ...
Squid的日志记录详细且可定制,包括访问日志、错误日志等,有助于分析用户行为、诊断问题和优化配置。如果遇到问题,Squid提供的命令行工具如`squidclient`和`squidstat`可以帮助检查服务器状态和诊断问题。 总的来...
9.Squid 命中率分析Squid的命中率是衡量其性能的重要指标,可以通过以下命令查看: ```bash squid -k parse -sV | grep 'Cache Hitrate' ``` 10.Squid 排错如果遇到问题,查看Squid的日志文件(默认为`/var/log/...
5. **日志分析**:Squid产生的日志文件可以用于分析用户访问行为,帮助优化网络资源分配。 五、Squid维护与优化 1. 定期清理缓存:保持存储空间的合理利用,避免因缓存过多导致服务器性能下降。 2. 监控与调试:...
7. **日志记录**:Squid能够详细记录所有通过它的网络活动,这对于监控网络流量、分析用户行为以及进行故障排查非常有用。 8. **可扩展性**:Squid可以通过插件和模块进行扩展,适应各种需求,例如添加对FTP、SSL、...
1.Net-snmp 获取与安装 2.Net-snmp 的配置 3.Net-snmp 常用命令 Squid 1.检查linux是否存在squid老版本 2.Squid 获取与安装 3.Squid 配置 4.Squid 测试 ...9.Squid命中率分析 10.Squid 排错
了解如何阅读和分析Squid3的日志文件,对于解决性能问题和安全事件至关重要。Squid3提供了丰富的日志级别和格式,可以根据需要调整。 总结,Squid3配置是一个涉及多个方面的任务,涵盖了网络架构、性能优化、安全...
### Squid 缓存服务器研究 #### 一、Squid 概述 Squid 是一款广泛应用于互联网数据缓存的开源软件。其主要功能是接收来自客户端的请求,并根据请求内容,从远程服务器获取数据后缓存至本地。当下次再次请求相同的...
6. **日志记录与分析**:Squid 提供详细的访问日志,便于网络管理者进行流量分析和故障排查。 ** Squid 的工作原理** Squid 通常运行在客户端和 Internet 之间,当用户请求一个 Web 页面时,请求首先被发送到 ...
在Linux环境中,Squid是一个常用的代理服务器和缓存服务器,它可以提高网络访问速度并实现内容过滤。在本文中,我们将详细介绍如何在Linux系统中安装、配置、卸载Squid,以及安装和配置SNMP(简单网络管理协议)。 ...
### Squid 文件上传大小配置详解 #### 一、引言 在互联网应用中,代理服务器是一种常见的技术手段,用于提供安全、高效的网络访问服务。Squid 作为一款开源的高性能代理缓存软件,在众多场景中得到了广泛的应用。...
在企业网络环境中,Squid通常作为网络访问的中介,帮助客户端处理对互联网的请求。 Squid的工作原理主要包括以下几个关键点: 1. **缓存机制**:Squid的核心功能是缓存。当客户端(如浏览器)向Squid发送HTTP请求...