我设置了两台服务器(据我所知)完全一样.在其中一个上,使用git一直很好,但是在第二个上,我开始收到这个错误:
致命:远程端意外挂起
错误:边带解复用器出错
两者之间的一切都是相同的,包括.git/hooks/post-receive文件的内容.
配置中是否有一步我错过了什么地方?我已经尝试过两次重新启动回购,但无济于事.
我的收件后文件如下:
#!/ bin/sh
cd ..
env -i git reset --hard
有没有一种有效的方法来检测jpeg文件是否已损坏?
背景信息:
解决方案需要在php脚本
中工作jpeg文件在磁盘上
手动检查是没有选项(用户上传的数据)
我知道imagecreatefromjpeg(string $filename);可以做到.但这样做很慢.
有人知道更快/更有效的解决方案吗?
已经几次,我遇到了我的一个SVN存储库损坏的情况,我们可以对项目的某些版本或分支做任何事情而不知道我们做了什么.所以我问是什么导致存储库变得腐败?
似乎客户端之间的不兼容性可能会导致问题,更具体地说是字符集.
大家好吗,请你推荐一个工具,用于在使用c ++构建并在linux x86_64下工作的生产多线程服务器上发现内存损坏?我目前面临以下问题:每隔几个小时我的服务器崩溃并出现段错误,核心转储显示错误发生在malloc/calloc中,这绝对是内存在某处被破坏的标志.
实际上我已经尝试了一些没有太多运气的工具.这是我迄今为止的经历:
Valgrind是一个伟大的(我甚至说是最好的)工具,但它使服务器的速度变慢,使其无法在生产中使用.我在舞台服务器上尝试了它,它确实帮助我找到了一些与内存相关的问题但是即使在修复它们之后我仍然会在生产服务器上崩溃.我在Valgrind下运行了我的舞台服务器几个小时,但仍然无法发现任何严重的错误.
据说ElectricFence是一个真正的记忆猪,但我甚至无法让它正常工作.它几乎立即在舞台服务器上的随机奇怪的地方进行了段落,其中Valgrind根本没有显示任何问题.也许ElectricFence不支持线程化?我不知道.
杜马 - 和ElectricFence一样,但更糟糕的是.虽然EF产生了具有可读回溯的核心转储,但DUMA只显示"?????"(并且肯定服务器使用-g标志构建)
dmalloc - 我将服务器配置为使用它而不是标准的malloc例程,但它会在几分钟后挂起.将gdb附加到进程显示它挂在dmalloc中的某处:(
我渐渐变得疯狂,根本不知道接下来该做什么.我有以下工具要尝试:mtrace,mpatrol但也许有人有更好的主意?
我非常感谢你对这个问题的任何帮助.
更新:我设法找到了错误的来源.但是我发现它在舞台服务器上没有生成一个使用helgrind/DRD/tsan - 几个线程之间有一个datarace导致内存损坏.关键是使用适当的valgrind抑制,因为这些工具显示太多的误报.我仍然不知道如何在没有任何显着减速的情况下在生产服务器上发现这一点......
我正在调试一些随机的崩溃错误,但实际上很难深入研究.因为当我打开崩溃转储时,只发现一个错误:
0:000> .exr -1
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
Run Code Online (Sandbox Code Playgroud)
实际上我没有在代码中设置任何硬代码断点,所以我在google中搜索这个异常,有人说这个异常可能是由于堆损坏引起的.所以我的问题是,是否有任何其他原因导致此异常,除了硬编码断点,调试时手动断点,堆损坏?
另一个问题是,我尝试使用Application Verifier来检查堆损坏,我理解它是如何工作的,app验证器将在堆损坏时触发中断指令异常.但是目前,我在没有app验证程序的情况下运行,谁会提出中断指令异常?
附加信息:当前线程的调用堆栈.
*0:000> k
ChildEBP RetAddr
0012f96c 7c827d19 ntdll!KiFastSystemCallRet
0012f970 77e6202c ntdll!NtWaitForMultipleObjects+0xc
0012fa18 7739bbd1 kernel32!WaitForMultipleObjectsEx+0x11a
0012fa74 3b288523 user32!RealMsgWaitForMultipleObjectsEx+0x141
0012fab8 3b32b9bd msenv!EnvironmentMsgLoop+0x1ea
0012fae4 3b32b94d msenv!CMsoCMHandler::FPushMessageLoop+0x86
0012fb0c 3b32b8e9 msenv!SCM::FPushMessageLoop+0xb7
0012fb28 3b32b8b8 msenv!SCM_MsoCompMgr::FPushMessageLoop+0x28
0012fb48 3b32be4e msenv!CMsoComponent::PushMsgLoop+0x28
0012fbe0 3b327561 msenv!VStudioMainLogged+0x482
0012fc0c 3000a4a6 msenv!VStudioMain+0xc1
0012fc38 30007301 devenv!util_CallVsMain+0xff
0012ff14 3000760c devenv!CDevEnvAppId::Run+0x91f
0012ff30 30007680 devenv!WinMain+0x74
0012ffc0 77e6f23b devenv!License::GetPID+0x258
0012fff0 00000000 kernel32!BaseProcessStart+0x23*
Run Code Online (Sandbox Code Playgroud)
我们的应用程序是Visual Studio包.
以下是!analyze -v的结果
0:000> !analyze -v
*******************************************************************************
* …Run Code Online (Sandbox Code Playgroud) 在最近的两周内,在没有发布我的应用程序更新的情况下,我开始收到一堆包含损坏数据库的报告.下面是堆栈跟踪.Android无法打开数据库,我的计算机上的sqlite-manager程序也无法打开.但是,fireite的SQLite manager-addon可以打开它.运行命令"compact database"后,数据库已修复,我可以在android中打开它.有什么方法可以在我的应用程序中做这样的事情吗?最大的问题是我甚至无法尝试打开数据库,因为较新版本的Android会立即删除并替换数据库,如下面的堆栈跟踪中所示.可以在不打开数据库的情况下以某种方式执行PRAGMA语句吗?
问候,
02-22 09:55:20.245: ERROR/Database(5382): CREATE TABLE android_metadata failed
02-22 09:55:20.245: ERROR/Database(5382): Failed to setLocale() when constructing, closing the database
02-22 09:55:20.245: ERROR/Database(5382): android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1818)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
02-22 09:55:20.245: ERROR/Database(5382): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
02-22 09:55:20.245: ERROR/Database(5382): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-22 09:55:20.245: ERROR/Database(5382): Deleting and re-creating corrupt database …Run Code Online (Sandbox Code Playgroud) 有没有人有任何想法如何务实地快速检查zip文件是否已根据文件大小损坏?理想情况下,检查zip是否已损坏的最佳方法是进行CRC校验,但这可能需要很长时间,尤其是在存在大量zip文件的情况下.我很高兴能够快速执行文件大小或标题检查.
提前致谢.
我刚刚在另一台远程服务器上克隆了一个存储库并遇到了一个试图这样做的问题:
git clone git@codebasehq.com:blah/blah/docs.git
Cloning into docs...
remote: Counting objects: 343, done.
remote: error: unable to find 14f87a739828e4d489b0310a51e057b30333926e
remote: Compressing objects: 100% (325/325), done.
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: fatal: unable to read 14f87a739828e4d489b0310a51e057b30333926e
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed
Run Code Online (Sandbox Code Playgroud)
我做了一点研究并发现了git fsck,这是输出:
$ git fsck --full
error: sha1 mismatch 14f87a739828e4d489b0310a51e057b30333926e
error: …Run Code Online (Sandbox Code Playgroud) 行为:
应用程序已加载并按预期使用.突然,无法再加载特定的DLL.错误消息是:
ActiveX组件无法创建对象.
在每种情况下,对象在失败之前已成功创建多次.所有对象都标记为"保留在内存中".
回收应用程序池时,将清除此错误.可能需要数小时或数月才能再次看到它.
问题发生在刷新后的两个小时内,并且在几个月的正常运行时间内从未发生过.
数百个同时用户(大量使用)以及1-3个用户也发生了问题.
问题发生时,运行该应用程序池的进程无法创建失败的对象.但是它可以创建任何其他对象.内存,CPU和其他资源都保持正常使用状态.此外,其他进程(例如独立的exe)可以成功创建对象.
该问题的第一个实例出现在2008年中期.自那时以来,已经有不到50个实例,尽管有数百台服务器可供使用.除一个实例之外的所有实例都在同一DLL上失败.
DLL失败信息:
最常见的 - 实现b树的通用数据结构,除了接口之外没有其他引用.代码由数组和vb6事件功能的一个用途组成.自2005年以来,该对象没有任何改变.
一次性 - 与.NET模块互操作.尝试创建互操作对象而不是.NET对象时发生失败.该对象每年更新几次.
应用程序环境:
IIS托管应用程序
VB6,经典ASP,一些与小型.NET组件互操作
Windows Server 2003/Windows Server 2008(两者都独立出现问题)
尝试重现:
使用脚本(和现实生活中的人类)运行我们的日志在问题发生前几天报告的相同最终用户工作流程.
使用脚本从多个同时会话中尽可能快地创建/销毁可疑对象.
狂野的猜测.没有故意的成功,但它确实在服务器上随机出现.
故障排除:
代码审查
测试线束以调查对象创建/销毁的上限在
验证问题的过程之外创建对象的能力的验证
在负载的服务器上监视资源随着时间的推移
检查IIS,错误和事件日志以确定事件导致发布
问题:
有关如何重现问题的任何想法?
什么可能导致这种行为?
绕过前两个问题的想法有利于快速解决方案?
我试图用C++编写一个程序,以尽可能最快的方式处理大量数据包.来自标准的所有数据包应尽可能快地读取,从池中发送到一个线程进行处理,然后处理到将数据包写入标准输出的输出线程.
当您在C++中使用标准输入和输出时,建议在任何输入或输出之前调用std :: ios_base :: sync_with_stdio(false)函数.在某些环境中,这可以实现很大的加速,但是在调用之后应该避免使用标准C函数进行输入/输出.
嗯,这似乎在单个线程中完美运行.但正如我所说,我的意图是使用一个线程进行输入,一个用于输出,多个线程用于并行处理.我观察到输出有些问题.这是输出线程(非常简化):
void PacketDispatcher::thread_process_output(OutputQueue& output_queue) {
std::vector<Packet> packet_list;
while(output_queue.get(packet_list)) {
for (const auto& packet: packet_list) {
std::cout << "Packet id = " << packet.id << "\n";
}
}
std::cout.flush();
}
Run Code Online (Sandbox Code Playgroud)
如果我使用std :: endl而不是"\n",那么腐败就会减少,但是std :: endl强制刷新流,在这种情况下影响性能(并且问题没有解决,只是最小化).
这是使用std :: cout的程序中唯一的一点,但是如果我在程序开始时调用std :: ios_base :: sync_with_stdio(false),我会得到一个明显的加速,但是我的输出总是被损坏了一些办法:
Packet id = Packet id = 4
Packet id = 5
Packet id = 6
Packet id = 7
Packet id = 8
Packet id …Run Code Online (Sandbox Code Playgroud)