我的问题是这个的扩展如何操纵Linux中的页面缓存?
我试图做一个小项目,旨在限制每个文件使用的页面缓存的大小.我使用的方法如下 -
我希望这段代码可以释放页面并释放内存,但这似乎不会发生.例如,如果我读取一个大小为25MB的文件并且我将此文件的页面缓存大小限制为512页(2MB),那么我希望在可用内存中看到只有2MB的更改(free -m ).我所看到的是完整的25MB被吃掉并显示在free命令中.
我还应该做些什么来确保满足我的要求?我还没有考虑过脏页面,因为我甚至无法让它读取(cat the file).任何指针都会有所帮助.
PS - 我正在使用linux 4.0进行这个项目.
我很确定我可以对我的绝大部分网站进行页面缓存,但阻止我这样做的一件事是我的flash消息不会显示,或者它们会在错误的时间显示.
我正在考虑的一件事是将flash消息写入cookie,阅读它并通过javascript显示它,并在消息显示后清除cookie.有没有人有这样的成功或有更好的方法?
谢谢.
我有一个控制器索引操作,它返回json输出.
render :json => my_array.to_json
Run Code Online (Sandbox Code Playgroud)
我必须在这里使用什么类型的缓存."页面缓存"对此有意义吗?
或者我必须像下面那样进行动作缓存
caches_action :index
Run Code Online (Sandbox Code Playgroud) 我有一个定义了以下缓存的页面:
<%@ OutputCache Duration="60" VaryByParam="None" %>
Run Code Online (Sandbox Code Playgroud)
我在该页面中有一个用户控件,我不想缓存.如何才能为该控件关闭它?
我已经在Kubernetes上运行Kafka了一段时间没有任何重大问题; 然而,我最近推出了一组Cassandra pods并开始遇到Kafka的性能问题.
尽管Cassandra不像Kafka那样使用页面缓存,但它确实会频繁写入磁盘,这可能会影响内核的底层缓存.
我知道Kubernetes pod正在通过cgroup管理内存资源,可以通过在Kubernetes中设置内存请求和限制来配置,但我注意到Cassandra利用页面缓存可以增加我的Kafka pod中的页面错误数量,即使它们是似乎没有竞争资源(即,他们的节点上有可用的内存).
在Kafka中,更多页面错误会导致更多磁盘写入,这会妨碍顺序IO的优势并降低磁盘性能.如果您使用AWS的EBS卷,这将最终耗尽您的突发平衡并最终导致整个群集的灾难性故障.
我的问题是,是否有可能隔离Kubernetes中的页面缓存资源,或者以某种方式让内核知道我的Kafka pod所拥有的页面应该比我的Cassandra pod中的那些更长时间保存在缓存中?
有没有办法告诉Rails 3缓存给定控制器中的所有页面而不必在调用时列出所有页面caches_page?我试过caches_page :all,但它不起作用.
在将数据写入磁盘之前有页面缓存.
如果我有两个操作.
write(fileA)
write(fileB)
Run Code Online (Sandbox Code Playgroud)
然后,如果系统突然关闭.我们不主动调用sync()调用.
我想知道我们写入fileB的数据是否有可能刷新到磁盘,而我们写入fileA的数据是否还没有刷新到磁盘?
以另一种方式提出问题,您是否可以确认当您执行mmap()文件时实际上访问的是页面高速缓存中已经存在的确切物理页面?
我问是因为我正在测试的192核心计算机上具有1TB的RAM,在测试之前预先缓存到页面缓存中的400GB数据文件上(通过仅删除缓存,然后对文件进行md5sum) 。
最初,我假设所有192个线程分别单独映射文件,假设它们都(基本上)返回相同的内存区域(或也许是相同的内存区域,但以某种方式多次映射)。因此,我假设使用两个不同映射到同一文件的两个线程都可以直接访问相同的页面。(在此示例中,我们忽略NUMA,尽管显然在线程数较高时,NUMA很重要。)
但是,实际上,我发现当每个线程分别映射文件时,如果线程数量更多,性能将变得很糟糕。当我们删除它,取而代之的是将一个mmap传递到线程中(这样,所有线程都直接访问同一内存区域),则性能得到了显着提高。
太好了,但是我想找出原因。如果实际上映射文件只是授予对现有页面高速缓存的直接访问权限,那么我认为映射它多少次无关紧要-它都应该放在完全相同的位置。
但是考虑到性能成本如此之高,在我看来,实际上每个mmap都是独立且冗余地填充的(可能是通过从页面缓存中复制,或者可能是从磁盘中再次读取)。
您能否评论一下为什么我看到在共享访问同一内存与映射同一文件之间存在如此不同的性能?
谢谢,谢谢您的帮助!
我在Ruby on Rails 3应用程序中使用Memcached.它适用于动作和片段缓存,但是当我尝试使用页面缓存时,页面存储在文件系统中而不是存储在Memcached中.如何告诉Rails也使用Memcached进行页面缓存?
在我的development.rb文件中:
config.action_controller.perform_caching = true
config.cache_store = :mem_cache_store
Run Code Online (Sandbox Code Playgroud) 我们有id分区和子域的页面缓存.比如说ny.site.com/cat/12345或者la.site.com/dog/234,nginx需要的请求
/cat/ny/1234/5.html存在,返回request_uri文件点击应用程序服务器,即可创建缓存文件我们设法找出子域和id分区部分,但是在try_files部分没有运气.总是得到无限循环错误,如rewrite or internal redirection cycle while internally redirecting to
我们的nginx.conf文件就像
rewrite "/cat/([0-9]{4})([0-9]{1,4})" /system/cache/cat/$subdomain/$1/$2.html break;
rewrite "/cat/([0-9]{1,4})" /system/cache/cat/$subdomain/$1.html break;
try_files $uri $request_uri;
Run Code Online (Sandbox Code Playgroud)
任何提示?谢谢!
更新: 我尝试了以下内容.Nginx在文件系统中寻找$ request_uri(例如/ cat/12345)而不是点击app服务器.有什么想法吗?
try_files $uri @old;
location @old {
rewrite ^ $request_uri break;
}
Run Code Online (Sandbox Code Playgroud) 我看到了“ doc_values”的ES文档http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/doc-values.html说
“文档值是在索引时而不是搜索时生成的”,那么如果使用doc_values将生成什么?
“ doc值是预先构建的,并且初始化速度要快得多”,为什么它要快得多?
“但是没有使用堆内存”,那么使用页面缓存吗?
有人可以向我解释doc_values的实现方式以及何时使用吗?我定期用jstat检查我的堆使用情况,我发现我还有足够的空间使用。
page-caching ×11
caching ×4
linux-kernel ×3
mmap ×2
.net-4.0 ×1
apache-kafka ×1
asp.net ×1
cgroups ×1
json ×1
kubernetes ×1
linux ×1
lucene ×1
memcached ×1
nginx ×1
rewrite ×1
ruby ×1
solr ×1