尝试了多个论坛来到这个底部。 我希望我能在这里得到一些方向:
这里是我正在使用的堆栈:红帽企业Linux服务器版本5.6(Tikanga)Glassfish 3.0.1上的Liferay 6.0.6 MySQL 5.0.77 Apache 2.2.3
Liferay门户为最终用户提供了各种portlet。 静态内容(网页),静态资源(主要是1MB-80MB大小的pdf和mp3文件),file upload和下载function(主要是40-60mb mp3文件)以及这些MP3文件的在线stream式传输。
以下是最终用户的奇怪体验:在正常的负载下:(20-30)用户上传,下载或stream媒体文件和20-30访问静态内容(一些下载),我们看到以下内容:
1)点击一个链接触发一部分MP3的下载(该部分是几秒钟)。
2)点击一个链接,会触发页面内容的下载而不是渲染。
3)点击链接会导致页面将二进制数据转储到最终用户而不是预期的内容。
4)点击一个链接返回一个javascript文件的文本,而不是渲染页面。
每个事件都是完全随机的(或者是如此)。 有时候是有效的,有时却不行。 这似乎与浏览器或客户端操作系统没有关系。 当使用SSL连接而不是普通的http时,奇怪的事件似乎更频繁地发生。
Apache仅作为代理服务器(反向)。 它基本上将所有请求传递给Glassfish。 没有任何Apache服务的静态内容代理。
我们从头开始重新构build整个堆栈,并重新部署portlet战争,但仍然有相同的问题。 Liferay作为单个服务器运行(不是群集的)。 我们在Apache中禁用了mod_cache。 随着服务器负载的增长,问题会更加频繁。 今天早上的负载非常轻,我们看到的问题很less,但是网站的使用将会增长,尤其是在今天晚上9点左右到周三早上的CST。 您可以在这段时间尝试网站( http://preview.bsfinternational.org ),我期望您随时随地点击网站上的链接(仅在login时调用https),您可能会体验到其中的一种奇怪现象。 同样,https似乎加剧了这个问题。
这看起来像是一个caching问题,但我不知道在堆栈中的哪个位置开始剥洋葱。 Apache的? Liferay的? Glassfish的? MySQL的? 甚至可能是Redhat? 我们很难过,我们发布的大多数论坛(LifeRay和Glassfish)都没有提出什么build议。 我只需要从哪里开始寻找的想法。 我明白,我们可以有一个portlet
编辑:打开一个hex编辑器中的文件,似乎是下载,而不是渲染的页面,我们看到,前4000个字符是“垃圾”,然后看到“HTTP / 1.1 ….”“正常”标题。 所以有些东西是倾倒混乱的字符来抵消4000(当在hex编辑器中查看时)。 也许是一个线索?
编辑2:4000h抵消是16k(16384)。 我认为这是一个caching问题,但不知道在哪里寻找这种大小的caching设置。 我在Apache中看到对16k LRUcaching缓冲区的引用,但是我知道Glassfish(或者Liferay)使用ehcache。 这是否引发任何人的想法? 想法?
查找问题所在位置的关键在于从等式中删除不同的部分 – 或者在不能的情况下拦截stream量。
例如:
由于问题看起来相当于HTTP端(产生非法的HTTP响应),我认为数据库被排除是原因。
还有一些技术性较差的build议
另一种解决这类问题的一般方法是让别人看一眼,而不告诉他们你已经做了什么 – 只要坐在那里,让他们解释他们在看什么,也许你会发现一些还没有跨越你的想法或者你没有检查过。
而且,在你的脑海中玩弄技巧:使用不同的计算机或桌面来进行testing:改变物理angular度来观察系统有时是不同的想法的好原因。 听起来很愚蠢,但有时候大脑想被欺骗。
所以这里是答案(不是完整的答案,但至less是解决scheme)。 我们有一个第三方portlet,它在URL中具有\ secure的某些URL上强制执行SSL连接。 我们删除了该portlet,问题消失了。
当我有机会检查代码时,我可能会找出portlet导致问题的原因。 但是我们几个星期就无事可做了,这个portlet肯定是原因(AFAIK)。